关于适配器模式的定义,我就直接引用Head First了:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器模式的意图是进行接口的转换,这点很重要,这是区分装饰者模式的“扩展行为”和代理模式的“访问控制”的依据。 其实学设计模式,不能拘泥于格式,不能死记形式,重要的是要理解模式背后的意图,意图只有一个,但实现的形式却可能多种多样。这也就是为何那么多变体依然属于xx设计模式的原因。假如有硬件厂商提供一种智能音箱,其对外提供了“打开”和“关闭”两个接口: 这是具体的智能音箱类: 现厂商对所属硬件进行了技术升级,发现“关闭”接口并不常用,所以替换成了“休眠”接口,现智能设备接口类2.0见下: 这是新版智能音箱类2.0具体类: 公司A,一直是该厂商智能音箱的忠实用户,今天在将智能音箱从1.0升级到2.0后,发现已有的业务无法正常运行了。在痛斥硬件厂商私自更改公开接口外,公司A的工程师只能先进行紧急修复。 为了兼容老版本和尽可能少的代码改动,工程师老王提出:我们要将不兼容的接口变成兼容的接口。可怎么将2.0的接口转换成客户期待的1.0接口呢?适配器对象见下: 通过适配器对象,我们就能对SpeakerBox2 对象像SpeakerBox一样使用了。测试代码见下:适配器模式
这是智能设备接口类。public interface Ihardware { void on(); void off(); }
public class SpeakerBox implements Ihardware { @Override public void on() { System.out.println("打开音箱"); } @Override public void off() { System.out.println("关闭音箱"); } }
public interface Ihardware2 { void on(); void sleep(); }
public class SpeakerBox2 implements Ihardware2 { @Override public void on() { System.out.println("体验版-打开音箱"); } @Override public void sleep() { System.out.println("体验版-休眠音箱"); } }
public SpeakerBox2Adapter implements Ihardware { private SpeakerBox2 mSb2; public SpeakerBox2Adapter(SpeakerBox2 sb2) { this.mSb2 = sb2; } @Override public void on() { mSb2.on(); } @Override public void off() { /** * 当然这里可以进行一系列的转换逻辑。 */ mSb2.sleep(); } }
public class ClientTest { public static void main(String[] ags) { Ihardware hw1 = new SpeakerBox(); Ihardware hw2 = new SpeakerBox2Adapter(new SpeakerBox2()); // 接口调用 hw1.on(); hw1.off(); hw2.on(); hw2.off(); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算