博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式
阅读量:4481 次
发布时间:2019-06-08

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

适配器模式:

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

主要角色:

Target(目标角色):客户希望使用的接口,需要适配成这个接口。
Adaptee(源角色):被适配的接口,需要进行适配的接口。
Adapter(适配角色):对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类。

适用场景

1、你想使用一个已经存在的类,而它的接口不符合你的需求
2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)

适配器模式分为类适配器和对象适配器,不考虑类适配器了,两种适配器的区别和适配器模式的抽象代码可参考:

一个实例

一个纸书的打开和翻页接口,但是后来出现了电子书,只有启动和下一页接口,怎么适配呢?

interface PaperBookInterface {    public function turnPage();    public function open();}class Book implements PaperBookInterface {    public function open() {        echo "打开纸书";    }    public function turnPage() {        echo "纸书翻页";    }}interface EBookInterface {    public function pressNext();    public function pressStart();}class Kindle implements EBookInterface {    public function pressNext() {        echo "按下一页";    }    public function pressStart() {        echo "按开关启动";    }}class EBookAdapter implements PaperBookInterface{    private $ebook;        public function __construct(EBookInterface $kindle){        $this->ebook = $kindle;    }    public function open() {        $this->ebook->pressStart();    }    public function turnPage() {        $this->ebook->pressNext();    }        }$book = new Book();$book->open();$book->turnPage();$kindle = new EBookAdapter(new Kindle());$kindle->open();$kindle->turnPage();

 

转载于:https://www.cnblogs.com/leezhxing/p/4714675.html

你可能感兴趣的文章
英语语法(2)----点破主谓宾系表三大句型
查看>>
html如何与cgi数据交换,HTML网页与CGI之间通信的 实例分析
查看>>
html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
查看>>
mysql数据在html上面显示不出来的,HTML表格不能正确显示MySQL数据
查看>>
数据包和html,数据包和数据报有何区别?
查看>>
jq 异步调用一个html,聊聊如何将jQuery的$.ajax()用于异步HTTP请求
查看>>
android 7.0宽度432,全球最小的4G手机,比手掌还小,安卓7.0
查看>>
android fragmentstatepageradapter框架,Android FragmentStatePagerAdapter
查看>>
html自适应meta标签,自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结...
查看>>
html怎么加入编辑器,HTML 编辑器
查看>>
python发挥程度_你为什么用 Python?
查看>>
file 选择的文件胖多有多大_「HTML5 进阶」FileAPI 文件操作实战,内附详细案例,建议收藏...
查看>>
玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
查看>>
c mysql 时间段查询_mySql 时间段查询
查看>>
mysql sql乱码怎么解决_MYSQL数据库导入SQL文件出现乱码如何解决
查看>>
mysql的存储过程与事务_mysql的存储过程与事务入门
查看>>
java程序员闯关题网站_Java程序员每周必逛的十大学习网站
查看>>
python面试装饰器_Python测开面试题之装饰器
查看>>
flashcache mysql_flashcache的实现与分析
查看>>
linux shell 里面执行python 程序_Linux下编写脚本Shell和Python的区别?
查看>>