什么是适配器模式?
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。适配器能将因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
实现适配器的方式?
1 package com.lcw.adapter.test; 2 3 public interface ThreeSocket { 4 5 //需要一个三孔插座,也就是客戶的需求 6 public void needThreeSocket(); 7 8 }
TwoSocket.java
这是现有的组件,也就是那个二孔插座,也就是3种角色中的源(Adatee),虽然能通电,但接口是不满足客户的需要
1 package com.lcw.adapter.test; 2 3 public class TwoSocket { 4 // 现有的插座,只有二孔,已经有了供电功能,只是缺少了三孔接口 5 public void serverTwo() { 6 System.out.println("我是一个二孔插座,我有供电功能"); 7 } 8 9 }
ThreeToTwoAdapter.java
这是适配器类,它需要2孔插座来提供电,并实现三孔插座,在构造方法中传入现有组件2孔插座的对象(带电)
1 package com.lcw.adapter.test; 2 3 public class ThreeToTwoAdapter implements ThreeSocket{ 4 private TwoSocket socket; 5 public ThreeToTwoAdapter(TwoSocket two) { 6 this.socket=two; 7 } 8 //现在已经有2孔插座的对象(意味着有通电功能) 9 @Override 10 public void needThreeSocket() { 11 socket.serverTwo(); 12 System.out.println("二孔接口已转换成三孔接口,并注入电"); 13 } 14 15 }
这样一来,适配器类这个中间类就有了源(二孔插座)的效果也就是"电"
然后再实现了目标接口方法,也就是开通了三相接口,把"电"注入,这样就可以把2个本无法一起工作的类聚集到一起,类似红娘在它们之间牵了一条关系线
Computer.java 笔记本类,它需要的是三孔接口
1 package com.lcw.adapter.test; 2 3 public class Computer { 4 //笔记本电脑的电源插头需求是3孔 5 private ThreeSocket three; 6 public Computer(ThreeSocket three){ 7 this.three=three; 8 } 9 public void server(){ 10 System.out.println("笔记本通电成功!"); 11 } 12 13 }
来写个测试类
1 package com.lcw.adapter.test; 2 3 public class Test { 4 public static void main(String[] args) { 5 //现有插座两孔,已经有提供电的功能,只是缺少3孔接口 6 TwoSocket two=new TwoSocket(); 7 //把具有通电功能的对象传递进去,目的是要开通3孔接口的通电功能 8 ThreeSocket three=new ThreeToTwoAdapter(two); 9 //得到一个满足笔记本电源接口且具有电的功能对象 10 Computer computer=new Computer(three); 11 three.needThreeSocket(); 12 computer.server(); 13 } 14 }
看下效果图:
好了,这样就把2个原本不能在一起工作的类链接到一起了。
接着来说下类适配器模式
类适配器顾名思义不同点在于适配器,既然突出了'类",我们一般都会联想到继承
嗯,没错,类适配器的做法就是让适配器去继承已有功能(二孔插座)的类,然后再实现期望接口(三孔插座)
具体看代码吧,除了测试类和适配器类,其他的类与上面的保持一致,这里就不再贴出
ThreeToTwoExtendsAdapter.java(适配器类)
1 package com.lcw.adapter.test; 2 3 public class ThreeToTwoExtendsAdapter extends TwoSocket implements ThreeSocket{ 4 public void needThreeSocket() { 5 this.serverTwo(); 6 System.out.println("二孔接口已转换成三孔接口"); 7 } 8 9 }
Test.java(测试类)
1 package com.lcw.adapter.test; 2 3 public class Test { 4 public static void main(String[] args) { 5 //由于ThreeToTwoExtendsAdapter继承了源,所以具有源的功能(电),并实现了3孔接口 6 ThreeSocket socket=new ThreeToTwoExtendsAdapter(); 7 //插入接口 8 Computer computer=new Computer(socket); 9 socket.needThreeSocket(); 10 computer.server(); 11 12 } 13 }
效果依旧:
总结下:
①对象适配模式:
把"被适配者"作为一个对象组合到适配器中,以修改目标接口包装被适配者。
(例如上面例子,二孔插座就是被适配者,把对象传入适配器并实现接口方法改造)
②类适配模式:
通过多重继承和实现接口的方式,单一的为某个类而实现适配。
适配器的作用?
1、透明:通过适配器客户端可以调用统一接口,对于客户端是透明的,这样做可以更加简洁, 直接,紧凑。
2、复用:复用了现存的类,解决因环境要求不一致的问题。
3、低耦合:将目标类与源类解耦,引入一个适配器重用源类(适配器类),遵守开放-关闭原则。
作者:Balla_兔子
出处:http://www.cnblogs.com/lichenwei/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!