适配器模式

参考自:http://blog.csdn.net/wzllai/article/details/7832815

适配器模式,可以将截然不同的函数接口封装成统一的API;
适配器模式将一个类的接口,转换成客户期望的另一个接口;
是的原本由于接口不兼容无法一起工作的类可以一起工作;解决兼容性;
透明:通过适配器,客户端可以调用同一个接口,因而对客户端来说是透明的,这样做更简单、更直接、更紧凑。
重用:复用了现存的类,解决了现存类和复用环境要求不一致的问题。
低耦合:将目标类和适配者类解耦,通过引入一个适配器类重用现用的适配者类,而无需修改原有代码。(遵循开闭原则)

应用场景:

PHP的数据库操作有mysql,mysqli,pdo3种,可以用适配器模式统一成一致。类似的像memcache,redis,file,apc等不同的缓存函数统一成一致;适配器作为一个中间层来实现不同功能转换。适配器模式不适合在详细设计阶段使用它,它是一种补偿模式,专用来在系统后期扩展、修改时所用。

类适配器:(使用继承方式实现)

client类最终面对的是Target接口(或者抽象类),它只能使用符合这个标准的子类(Adapter)。
类适配器(Adapter)继承原有的Adaptee类,自己实现原有类没有的操作,从而达到适配。client可以透明调用Adaptee中的特殊功能。

    interface ITarget  {  function operation1();  function operation2();  }  interface IAdaptee  {  function operation1();  }  class Adaptee extends IAdaptee  {  public  function operation1()  {  echo "原方法";  }  }  class Adapter extends Adaptee implements IAdaptee, ITarget  {  public  function operation2()  {  echo "适配方法";  }  }  class Client  {  public  function test()  {  $adapter = new Adapter();  $adapter->operation1();//原方法  $adapter->operation2();//适配方法  }  }  

对象适配器:(使用组合模式实现)

将adaptee作为adapter的一个引用。用该引用来调用所有adaptee中的方法。同时adapter实现客户期望的接口,达到适配。
由于组合在耦合性小于继承,对象适配器更加灵活。缺点就是增加代码量,需要重写adapee中的方法量。

    interface ITarget  {  function operation1();  function operation2();  }  interface IAdaptee  {  function operation1();  }  class Adaptee extends IAdaptee  {  public  function operation1()  {  echo "原方法";  }  }  class Adapter implements  ITarget  {  private $adaptee;  public function __construct($adaptee)  {  $this->adaptee = $adaptee;  }  public  function operation1()  {  return $this->adaptee->operation1();  }  public  function operation2()  {  echo "适配方法";  }  }  class Client  {  public  function test()  {  $adapter = new Adapter(new Adaptee(null));  $adapter->operation1();//原方法  $adapter->operation2();//适配方法  }  }  //如果adapee中的方法量比较大的话,可以考虑再adapter中使用__call方法来委托取得客户端调用的方法。public function __call($func, $args)  {  if (is_callable(array($this->adaptee, $func))) {  return $this->adaptee->$func($args);  }  trigger_error('*********', E_USER_ERROR);  }  

未完待续……….

PHP设计模式-适配器模式相关推荐

  1. Python设计模式-适配器模式

    Python设计模式-适配器模式 基于Python3.5.2,代码如下 #coding:utf-8class ACpnStaff:name = ""id = "" ...

  2. Java | 设计模式-适配器模式

    继代理模式后又来到适配器模式啦,想看之前的也有哦.持续更新中哦.让我们一起加油吧兄弟们,干他. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 你好,如果喜欢,请一起坚持!! ...

  3. java设计模式适配器模式_Java中的适配器设计模式

    java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...

  4. 设计模式适配器模式_适配器设计模式示例

    设计模式适配器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要 ...

  5. 设计模式适配器模式_21世纪的设计模式:适配器模式

    设计模式适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面. 在另一个世界,我们有不同的界面. 这两个接口有 ...

  6. java设计模式适配器模式_Java解释器设计模式

    java设计模式适配器模式 Interpreter design pattern is one of the behavioral design pattern. Interpreter patter ...

  7. Java代码审计-设计模式-适配器模式

    Java设计模式-适配器模式(Adapter Pattern) 目录 什么是适配器模式 适配器模式的3种类型 JavaSE适配器模式的应用 Struts2适配器模式的应用 适配器模式是一种" ...

  8. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式

  9. C++设计模式——适配器模式(adapter pattern)

    一.原理讲解 适配器模式别名为包装器(wrapper),分为类适配器(通过多继承实现).对象适配器(组合方式实现),由于类适配器比较少用,本文主要讲解用的比较多的对象适配器. 1.1意图 将一个类的接 ...

  10. [Head First设计模式]身边的设计模式——适配器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

最新文章

  1. 怎么编写段错误(Segmentation fault)的程序
  2. mysql外键无法删除_mysql外键无法删除数据的情况
  3. 深入浅出ShellExecute
  4. 创建型模式 简单工厂模式
  5. Aerospike NoSQL 数据库介绍
  6. AI:IPPR的模式生成-CNN模块学习/训练方式(基本结构)
  7. Linux如何访问mmio空间,一文读懂Linux下如何访问I/O端口和I/O内存
  8. mysql 非空语法_mysql从入门到优化(1)基本操作上
  9. java 判断字符串是否为数字
  10. linux 下export的作用,linux export 的作用
  11. iOS 搭建XMPP环境时添加依赖库报错及解决
  12. java除了android,Java中是否有类似android中的android.os.Handler的类?
  13. 一人有限责任公司章程范本
  14. 手机怎么下载python呢_安卓手机端怎么安装Python?
  15. 笔记本电脑频繁自动重启_笔记本电脑频繁自动重启的原因和纠正
  16. 盗版识别对软件资产管理至关重要
  17. 服务器系统计划任务不执行,Windows 2008 r2任务计划程序执行批处理失败问题解决方法...
  18. 程序员不做独行侠——沟通的核心是感受
  19. 2021年电工(中级)考试资料及电工(中级)考试试题
  20. 实时音视频聊天中的延时问题一篇就够,低延时场景及优化

热门文章

  1. MySQL的not exists与双重否定(模板)
  2. 关于网易云音乐代码音乐播放器单曲和歌单的调用
  3. Eclipse 配置JDK
  4. 配置Beyond Compare 4作为git mergetool来解决git merge命令导致的文件冲突
  5. html表格中文字上下左右居中对齐,word表格中文字如何设置左右和上下居中(水平和垂直居中)...
  6. 2023年谷歌外链购买最全攻略
  7. 解决 FileNotFoundError: [WinError 2] 系统找不到指定的文件
  8. node之request模块
  9. 古剑奇谭二服务器维护,《古剑奇谭网络版》2月28日更新维护公告
  10. C语言disp的头文件,TM1638.h 单片机C语言头文件