博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两种语言实现设计模式(C++和Java)(四:适配器模式)
阅读量:7043 次
发布时间:2019-06-28

本文共 2686 字,大约阅读时间需要 8 分钟。

参考:http://blog.jobbole.com/109381/

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

比如购买的第三方开发组件,该组件接口与我们自己系统的接口不相同,或者由于某种原因无法直接调用该组件,可以考虑适配器。

适配器模式分为类模式对象模式

 

案例:中国人去欧洲旅游,由于欧标规定双脚电源的都为O字口,而中国人用1字口的充电器,这时中国人给设备充电则需要适配器Dispatcher。

一.类模式

类模式的实现方式为多继承,通过public继承获得接口继承的效果,通过private继承获得实现继承的效果。

C++代码

1 #include 
2 3 using namespace std; 4 5 class IEuropeSocket{ 6 public: 7 virtual void charge() = 0; 8 }; 9 10 class ChineseCharger{11 public:12 void chargeWithFeetFlat(){13 cout << "Charge with Chinese charger"<
chargeWithFeetFlat();22 }23 };24 25 int main()26 {27 PowerAdapter *adapter = new PowerAdapter();28 adapter->charge();29 return 0;30 }

 

Java代码

1 public interface IEuropeSocket { 2     void charge(); 3 } 4  5 public class ChineseCharger { 6     void chargeWithFeetFlat(){ 7         System.out.println("Charge with Chinese charger"); 8     } 9 }10 11 public class PowerAdapter extends ChineseCharger implements IEuropeSocket{12 13     public void charge(){14         System.out.println("use Chinese charger and a Europe adapter");15         chargeWithFeetFlat();16     }17 }18 19 public class Main {20     public static void main(String[] args){21         PowerAdapter adapter = new PowerAdapter();22         adapter.charge();23     }24 }

二.对象模式

 

对象模式的实现方式为将适配者作为适配器类的成员。

C++代码

 

1 #include 
2 3 using namespace std; 4 5 class IEuropeSocket{ 6 public: 7 virtual void charge() = 0; 8 }; 9 10 class ChineseCharger{11 public:12 void chargeWithFeetFlat(){13 cout << "Charge with Chinese charger"<
chargeWithFeetFlat();26 }27 };28 29 int main()30 {31 PowerAdapter *adapter = new PowerAdapter(new ChineseCharger());32 adapter->charge();33 return 0;34 }

 

Java代码

1 public interface IEuropeSocket { 2     void charge(); 3 } 4  5 public class ChineseCharger { 6     void chargeWithFeetFlat(){ 7         System.out.println("Charge with Chinese charger"); 8     } 9 }10 11 public class PowerAdapter implements IEuropeSocket{12 13     private ChineseCharger charger;14 15     PowerAdapter(ChineseCharger charger) {16         System.out.println("use Chinese charger and a Europe adapter");17         this.charger = charger;18     }19 20     public void charge() {21         charger.chargeWithFeetFlat();22     }23 }24 25 public class Main {26     public static void main(String[] args){27         PowerAdapter adapter = new PowerAdapter(new ChineseCharger());28         adapter.charge();29     }30 }

 

转载于:https://www.cnblogs.com/Asp1rant/p/10770973.html

你可能感兴趣的文章
求100内质数的个数
查看>>
Ubuntu 安装Gitlab
查看>>
复习-1
查看>>
轻松搭建一台Windows SVN服务器
查看>>
js悬浮广告收集
查看>>
mock数据(模拟后台数据)
查看>>
如何创建一个只显示复制冲突文档的视图 (Lotus Notes/Domino)
查看>>
我的数据工程师男友
查看>>
Python正则表达式
查看>>
zabbix服务端,客户端一键安装脚本
查看>>
我的友情链接
查看>>
Oracle数据库迁移的几种方式
查看>>
查看系统cpu命令
查看>>
centos6.8 yum安装mysql 5.6 (完整)
查看>>
知识点总结报告 2.3
查看>>
添加千位分隔符
查看>>
【整理】网站返回顶部代码
查看>>
使用Cloud-Config
查看>>
sqlite3-第五章 API-核心API
查看>>
linux svn服务器权限配置
查看>>