适配器模式
定义:
将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。
类型:
结构型。
适用场景:
已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)
不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案。
优点:
能提高类的透明性和复用,现有的类复用但不需要改变
目标类和适配器类解耦,提高程序扩展性。
符合开闭原则。
缺点:
适配器编写过程需要全面考虑可能会增加系统的复杂性。
增加了系统代码可读的难度。
扩展
对象适配器:符合组合复用原则,使用委托机制
类适配器:通过类继承
适配器模式VS外观模式
都是对现有的类和系统的封装
外观定义了新的接口在现有系统中提供了方便的入口,适配器复用原有的接口,使两个已有的接口协同工作。外观的粒度更大。
代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36//类适配器 //接口 public interface Target { void request(); } //接口实现类1 public class ConcreteTarget implements Target{ @Override public void request() { System.out.println("具体的Target"); } } //被适配者 public class Adaptee { public void AdapteeRequest(){ System.out.println("被适配者的方法"); } } //适配器实现类 public class Adapter extends Adaptee implements Target{ @Override public void request() { super.AdapteeRequest(); } } //测试类 public class Test { public static void main(String[] args) { Target target=new ConcreteTarget(); target.request(); Target adapterTarget=new Adapter(); adapterTarget.request(); } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12//对象适配器,只有适配器实现类改变了,所以只把适配器实现类抛出来 public class Adapter implements Target { //这里不一样,可以对比一下。 private Adaptee adaptee=new Adaptee(); @Override public void request() { adaptee.AdapteeRequest(); } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33//220V交流电转5V直流电示例 public class AC220 { public int outputAC220V(){ int output=220; System.out.println("220交流电"); return output; } } //适配器接口 public interface DC5 { public int outputDC5(); } //实现类 public class Adapter implements DC5 { private AC220 ac220 = new AC220(); public int outputDC5() { int adapterInput=ac220.outputAC220V(); //变压器 int adapterOutput = adapterInput/44; System.out.println("转换为" + adapterOutput+"直流电"); return adapterOutput; } } //测试类 public class Test { public static void main(String[] args) { DC5 dc5=new Adapter(); dc5.outputDC5(); } }
类图:
最后
以上就是震动菠萝最近收集整理的关于适配器模式---代码实现,类图,电流转换实例-----Nothing适配器模式的全部内容,更多相关适配器模式---代码实现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复