PHP设计模式之适配器模式代码实例

目标:

可将一个类的接口转换成客户希望的另外一个接口,使得原本不兼容的接口能够一起工作。通俗的理解就是将不同接口适配成统一的API接口。

角色:

Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口。
Adaptee被适配者,就是需要被适配的接口。
Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。

应用场景:

如数据操作有mysql、mysqli、pdo、sqlite、postgresql等,假若生成环境需要更换数据库时,可利用适配器模式统一接口。同理cache的场景也是,这会是更换缓存策略(memcache、redis、apc)更方便。

优势:

被适配者通过适配器完成对适配目标的适配,以达到对客户使用透明的目的。

示例代码:

//适配目标,规定的接口将被适配对象实现
interface IDatabase
{
  public function connect($host, $username, $password, $database);
  public function query($sql);
}

//适配器
class Mysql implements IDatabase
{
  protected $connect;

  public function connect($host, $username, $password, $database)
  {
    $connect = mysql_connect($host, $username, $password);
    mysql_select_db($database, $connect);
    $this->connect = $connect;
    //...
  }

  public function query($sql)
  {
    //...
  }
}

//适配器
class Postgresql implements IDatabase
{
  protected $connect;

  public function connect($host, $username, $password, $database)
  {
    $this->connect = pg_connect("host=$host dbname=$database user=$username password=$password");
    //...
  }

  public function query($sql)
  {
    //...
  }
}

//客户端使用
$client = new Postgresql();
$client->query($sql);

如上:

Target适配目标: IDataBase接口
Adaptee被适配者: mysql和postgresql的数据库操作函数
Adapter适配器 :mysql类和postgresql类

(0)

相关推荐

  • php设计模式 Template (模板模式)

    继承关系由于自身的缺陷,被专家们扣上了"罪恶"的帽子."使用委派关系代替继承关系","尽量使用接口实现而不是抽象类继承"等等专家警告,让我们这些菜鸟对继承"另眼相看".其实,继承还是有很多自身的优点所在.只是被大家滥用的似乎缺点更加明显了.合理的利用继承关系,还是能对你的系统设计起到很好的作用的.而模板方法模式就是其中的一个使用范例. GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步

  • PHP设计模式之观察者模式(Observer)详细介绍和代码实例

    [意图] 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新[GOF95] 又称为发布-订阅(Publish-Subscribe)模式.模型-视图(Model-View)模式.源-监听(Source-Listener)模式.或从属者(Dependents)模式 [观察者模式结构图] [观察者模式中主要角色] 1.抽象主题(Subject)角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者. 抽象主题提供了增加和

  • 浅析php适配器模式(Adapter)

    前几篇介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,接下来讲讲结构型模式. 一.什么是结构型模式? 结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题. 二.结构型模式的种类: 适配器模式 桥接模式 装饰模式 组合模式 外观模式 享元模式 代理模式 1. 适配器模式(Adapter) 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本的由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景:老代码接口不适应

  • PHP实现的简单适配器模式示例

    本文实例讲述了PHP实现的简单适配器模式.分享给大家供大家参考,具体如下: <?php //适配器模式-通过适配器去执行第三方方法 //定义目标接口 interface Target{ public function simpleMethod1(); public function simpleMethod2(); } class Adatee{ public function simpleMethod1(){ echo 'Adatee simpleMethod1<br/>'; } }

  • 学习php设计模式 php实现适配器模式

    一.意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作 二.适配器模式结构图 三.适配器模式中主要角色 目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的 源(Adaptee)角色:需要进行适配的接口 适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配:适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类 四.适配器模式适用场景 1.你想使用一

  • php设计模式 DAO(数据访问对象模式)

    复制代码 代码如下: <?php /** * 数据访问对象(Data Access Object) 示例 * * @create_date: 2010-01-04 */ class BaseDAO { var $_db = null; var $_table = null; function BaseDAO($config) { $this->_db = new MysqlDB(); // 这里的不能进行操作 } /** * 获取处理 * * @param array $filter // 过

  • php设计模式 Adapter(适配器模式)

    复制代码 代码如下: <?php /** * 适配器模式 * * 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作 */ // 这个是原有的类型 class OldCache { public function __construct() { echo "OldCache construct<br/>"; } public function store($key,$value) { echo "OldCach

  • php设计模式 Proxy (代理模式)

    代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理. 代理模式,就是给某一对象提供代理对象,并由代理对象控制具体对象的引用. 代理模式涉及的角色: 抽象主题角色,声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 代理主题角色,含有真实主题的引用,从而可以在任何时候操

  • php适配器模式介绍

    要点: 1. 适配器模式主要应用于"希望复用一些现存的类,但是接口又与复用环境要求不一致的情况",在遗留代码复用.类库迁移等方面非常有用. 2. 适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用"多继承"的实现方式,带来了不良的高耦合,所以一般不推荐使用.对象适配器采用"对象组合"的方式,更符合松耦合精神. 实现: 类的适配器模式结构图(继承) 对象的适配器模式结构图(组合) (对象适配器的代码实现) Target:定义Cli

  • php设计模式小结

    1.单例模式 所谓单例模式,也就是在任何时候,应用程序中只会有这个类的一个实例存在.常见的,我们用到单例模式只让一个对象去访问数据库,从而防止打开多个数据库连接.要实现一个单例类应包括以下几点: 和普通类不同,单例类不能被直接实例化,只能是由自身实例化.因此,要获得这样的限制效果,构造函数必须标记为private. 要让单例类不被直接实例化而能起到作用,就必须为其提供这样的一个实例.因此,就必须要让单例类拥有一个能保存类的实例的私有静态成员变量和对应的一个能访问到实例的公共静态方法. 在PHP中

随机推荐