设计模式之适配器模式
2018-07-12 07:34:20来源:博客园 阅读 ()
在网上看了很多关于适配器设计模式的博客,感觉还是要靠自己去领悟这些设计模式,动手去写,最好结合生活当中的例子。
因为光看是学不会的,面向对象本来就是来自生活,来自生活中一个个鲜活的对象,不过它又是抽象的。
首先简单说下个人的理解,适配器,就是一个能够把原来我们不能去很方便地使用的东西转换成我们能够去使用的东西。
最简单的例子就是我们生活当中常见的手机或者电脑的适配器(充电器),它的功能就是把220v的电压转换成我们手机或电脑能使用的电压。
上图就是适配器模式的三个主要角色
首先要说明的是:Target和Adaptee没有任何的关系,只是有相同的一个方法名。
Target:目标。客户端需要使用的角色。在我们手机使用适配器充电的事件的体现就是我们手机需要的电压。
Adaptee:适配者(被改造者),需要进行转换的角色。在我们手机使用适配器充电的事件的体现就是220v的电压。
Adapter:适配器,作为Target和Adaptee间的一个桥梁,起到转换Adaptee成为符合Target标准的一个作用。在我们手机使用适配器充电的事件的体现就是充电器。
那么就以上面手机充电的例子进行编码,然后进行说明。
Target:目标角色,这是一个输出电流的接口。只有一个outStream(),这个是输出电流的方法。现在假设我们的手机需要的是5v的电压,这个数值后面会有用。
1 public interface Target { 2 3 int outStream(); 4 5 }
Apaptee:适配者。定义了一个与Target中定义的同名的outStream(),此方法返回的是我们生活的电压,220v
1 public class Adaptee { 2 public int outStream() { 3 System.out.println("Adaptee-->out220V"); 4 return 220; 5 } 6 }
Adapter:适配器,这个适配器继承了Adaptee类和实现了Target接口,然后复写了outStream()
1 public class Adapter extends Adaptee implements Target { 2 3 @Override 4 public int outStream(){ 5 System.out.println("对"+super.outStream()+"V进行转换...."); 6 System.out.println("现在是5V"); 7 return 5; 8 } 9 }
Phone:手机类,只有一个充电的方法,接受的是一个int类型的电压
1 public class Phone { 2 3 public void inStream(int v) { 4 if (v == 220) { 5 System.out.println("现在电压再充手机就要爆炸!"); 6 } 7 if (v == 5){ 8 System.out.println("5v电压可以充电!"); 9 } 10 } 11 }
Client:客户端
1 public class Client { 2 3 public static void main(String[] args) { 4 System.out.println("适配器模式:--------------------------"); 5 Target target = new Adapter(); 6 Phone p1 = new Phone(); 7 p1.inStream(target.outStream()); 8 9 System.out.println(); 10 11 System.out.println("非适配器模式:--------------------------"); 12 //不使用适配器 13 Adaptee adaptee = new Adaptee(); 14 Phone p2 = new Phone(); 15 p2.inStream(adaptee.outStream()); 16 } 17 }
运行结果:
适配器模式:--------------------------
Adaptee-->out220V
对220V进行转换....
现在是5V
5v电压可以充电!
非适配器模式:--------------------------
Adaptee-->out220V
现在电压再充手机就要爆炸!
说明:
适配器设计模式的精髓:
1)在这个例子中,我们的Target接口和Apaptee都定义了同名的outStream(),然后我们的Adapter继承Apaptee和实现Target。因为它从的父类中继承了outStream(),
所以不用复写方法了。要复写的话上面Apdapter就是例子。
2)同时Target的outStream()是我们Client要调用的方法,在通过创建Apater为Target实例化的例子中,Client端调用Target的方法就是通过适配器处理后的方法,也是间接得调用了Adaptee的方法。重点是,达到了我们不改变Target和Adaptee的关系的前提下完成我们的任务。
就写到这里吧, 水平一般,如果写得哪里不对,欢迎大家评论。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash