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

 更新时间:2015年12月07日 16:18:19   作者:胖胖  
这篇文章主要介绍了php设计模式中的适配器模式,使用php实现适配器模式,感兴趣的小伙伴们可以参考一下

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

三、适配器模式中主要角色
目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的
源(Adaptee)角色:需要进行适配的接口
适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类
四、适配器模式适用场景
1、你想使用一个已经存在的类,而它的接口不符合你的需求
2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)
五、类适配器模式与对象适配器
类适配器:Adapter与Adaptee是继承关系
1、用一个具体的Adapter类和Target进行匹配。结果是当我们想要一个匹配一个类以及所有它的子类时,类Adapter将不能胜任工作
2、使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子集
3、仅仅引入一个对象,并不需要额外的指针以间接取得adaptee
对象适配器:Adapter与Adaptee是委托关系
1、允许一个Adapter与多个Adaptee同时工作。Adapter也可以一次给所有的Adaptee添加功能
2、使用重定义Adaptee的行为比较困难
适配器模式与其它模式
桥梁模式(bridge模式):桥梁模式与对象适配器类似,但是桥梁模式的出发点不同:桥梁模式目的是将接口部分和实现部分分离,从而对它们可以较为容易也相对独立的加以改变。而对象适配器模式则意味着改变一个已有对象的接口
装饰器模式(decorator模式):装饰模式增强了其他对象的功能而同时又不改变它的接口。因此装饰模式对应用的透明性比适配器更好。
六、类适配器模式PHP示例
类适配器使用的是继承

<?php
/**
 * 目标角色
 */
interface Target {
 
  /**
   * 源类也有的方法1
   */
  public function sampleMethod1();
 
  /**
   * 源类没有的方法2
   */
  public function sampleMethod2();
}
 
/**
 * 源角色
 */
class Adaptee {
 
  /**
   * 源类含有的方法
   */
  public function sampleMethod1() {
    echo 'Adaptee sampleMethod1 <br />';
  }
}
 
/**
 * 类适配器角色
 */
class Adapter extends Adaptee implements Target {
 
  /**
   * 源类中没有sampleMethod2方法,在此补充
   */
  public function sampleMethod2() {
    echo 'Adapter sampleMethod2 <br />';
  }
 
}
 
class Client {
 
  /**
   * Main program.
   */
  public static function main() {
    $adapter = new Adapter();
    $adapter->sampleMethod1();
    $adapter->sampleMethod2();
 
  }
 
}
 
Client::main();
?>

七、对象适配器模式PHP示例
对象适配器使用的是委派

<?php
/**
 * 目标角色
 */
interface Target {
 
  /**
   * 源类也有的方法1
   */
  public function sampleMethod1();
 
  /**
   * 源类没有的方法2
   */
  public function sampleMethod2();
}
 
/**
 * 源角色
 */
class Adaptee {
 
  /**
   * 源类含有的方法
   */
  public function sampleMethod1() {
    echo 'Adaptee sampleMethod1 <br />';
  }
}
 
/**
 * 类适配器角色
 */
class Adapter implements Target {
 
  private $_adaptee;
 
  public function __construct(Adaptee $adaptee) {
    $this->_adaptee = $adaptee;
  }
 
  /**
   * 委派调用Adaptee的sampleMethod1方法
   */
  public function sampleMethod1() {
    $this->_adaptee->sampleMethod1();
  }
 
  /**
   * 源类中没有sampleMethod2方法,在此补充
   */
  public function sampleMethod2() {
    echo 'Adapter sampleMethod2 <br />';
  }
 
}
 
class Client {
 
  /**
   * Main program.
   */
  public static function main() {
    $adaptee = new Adaptee();
    $adapter = new Adapter($adaptee);
    $adapter->sampleMethod1();
    $adapter->sampleMethod2();
 
  }
 
}
 
Client::main();
?>

以上就是使用php实现适配器模式的代码,还有一些关于适配器模式的概念区分,希望对大家的学习有所帮助。

相关文章

  • 一个简单且很好用的php分页类

    一个简单且很好用的php分页类

    一个简单且很好用的php分页类。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • php实现的遍历文件夹下所有文件,编辑删除

    php实现的遍历文件夹下所有文件,编辑删除

    遍历文件夹; 功能:(a)可删除文件 (b)可编辑文本,网页文件 (c)可删除文件夹,前提是该文件夹为空 (d)可建立文件,文件夹,修改文件夹名称
    2010-01-01
  • Ajax+PHP 边学边练之四 表单

    Ajax+PHP 边学边练之四 表单

    通过上一篇文章已经了解到如何利用Ajax和PHP对数据库进行数据读取,这样可以动态的获取到数据库的最新数据。本篇则继续介绍通过表单(Form)向数据库中写入数据。
    2009-11-11
  • 删除无限分类并同时删除它下面的所有子分类的方法

    删除无限分类并同时删除它下面的所有子分类的方法

    今天晚上上Q的时候 ,一个以前的学员在网上问我,怎么删除一个无限分类的时候同时删除它下面的所有子分类。我把代码稍微整理了一下,发出来,放在php学员问答里面,方便以后的人查看 。
    2010-08-08
  • php随机显示指定文件夹下图片的方法

    php随机显示指定文件夹下图片的方法

    这篇文章主要介绍了php随机显示指定文件夹下图片的方法,涉及array_rand随机数组操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 8个PHP数组面试题

    8个PHP数组面试题

    这篇文章主要介绍了8个PHP数组面试题,例如写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1、创建长度为10的数组,数组中的数为递增的等比数,比值为3,首项为等题目,需要的朋友可以参考下
    2015-06-06
  • PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍

    PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍

    PHP 为执行外部命令提供大量函数,其中包括 shell_exec()、exec()、passthru() 和 system()。这些命令是相似的,但为您运行的外部程序提供不同的界面。
    2011-09-09
  • php采用session实现防止页面重复刷新

    php采用session实现防止页面重复刷新

    这篇文章主要介绍了php采用session实现防止页面重复刷新的代码及使用方法,需要的朋友可以参考下
    2015-12-12
  • php+jQuery ajax实现的实时刷新显示数据功能示例

    php+jQuery ajax实现的实时刷新显示数据功能示例

    这篇文章主要介绍了php+jQuery ajax实现的实时刷新显示数据功能,结合实例形式分析了php结合jQuery ajax实时刷新读取显示数据库数据相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • php使用str_replace替换多维数组的实现方法分析

    php使用str_replace替换多维数组的实现方法分析

    这篇文章主要介绍了php使用str_replace替换多维数组的实现方法,结合具体实例对比分析了php针对多维数组的遍历与替换操作相关实现技巧与注意事项,需要的朋友可以参考下
    2017-06-06

最新评论