浅析php适配器模式(Adapter)_php实例

前几篇介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,接下来讲讲结构型模式。

一、什么是结构型模式

结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题。

二、结构型模式的种类

适配器模式
桥接模式
装饰模式
组合模式
外观模式
享元模式
代理模式

1、 适配器模式(Adapter)
将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本的由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景:老代码接口不适应新的接口需求,或者代码很多很乱不便于继续修改,或者使用第三方类库。

代码实现

复制代码 代码如下:

//老的代码    
class User {   
    private $name;   
    function __construct($name) {   
        $this->name = $name;   
    }   
    public function getName() {   
        return $this->name;   
    }   
}   

//新代码,开放平台标准接口   
interface UserInterface {   
    function getUserName();   
}   
class UserInfo implements UserInterface {   
    protected $user;   
    function __construct($user) {   
        $this->user = $user;   
    }   
    public function getUserName() {   
        return $this->user->getName();   
    }   
}   

$olduser = new User('张三');   
echo $olduser->getName()."n";   
$newuser = new UserInfo($olduser);   
echo $newuser->getUserName()."n";   

 注意点:这里的新接口使用了组合方式,UserInfo内部有一个成员变量保存老接口User对象,模块之间是松耦合的,这种结构其实就是组合模式。不要使用继承,虽然UserInfo继承User也能达到同样的目的,但是耦合度高,相互产生影响。

以上就是关于php设计模式中结构性模式中的适配器模式的全部内容了,小伙伴们是否了解清楚了呢,有问题就给我留言吧

时间: 2024-12-30 22:47:22

浅析php适配器模式(Adapter)_php实例的相关文章

浅析php原型模式_php实例

原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 应用场景: 类的资源非常多.性能和安全要求,一般和工厂方法结合使用. 复制代码 代码如下: <?php /**  * 原型模式  */ //声明一个克隆自身的接口 interface Prototype {     function copy(); }   //产品要实现克隆自身的操作 class Student implements Prototype {        //简单起见,这里没有使用get set  

浅析php工厂模式_php实例

本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式. 设计模式的一般介绍在第一篇文章讲了,这里就不重复. 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 应用场景:众多子类并且会扩充.创建方法比较复杂. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 , 三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化.而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样.但本质是,简单工

浅析php创建者模式_php实例

创建者模式: 在创建者模式中,客户端不再负责对象的创建与组装,而是把这个对象创建的责任交给其具体的创建者类,把组装的责任交给组装类,客户端支付对对象的调用,从而明确了各个类的职责. 应用场景:创建非常复杂,分步骤组装起来. 复制代码 代码如下: <?php /**  * 创建者模式  */ //购物车 class ShoppingCart {        //选中的商品     private $_goods = array();     //使用的优惠券     private $_tick

浅析PHP文件下载原理_php实例

1.php下载原理图 2.文件下载源码: 复制代码 代码如下: <?php $file_name="哈哈.jpg";//需要下载的文件 $file_name=iconv("utf-8","gb2312","$file_name"); $fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存 if(!file_exists($file_name)){//判断文件是否

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

目标: 可将一个类的接口转换成客户希望的另外一个接口,使得原本不兼容的接口能够一起工作.通俗的理解就是将不同接口适配成统一的API接口. 角色: Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口. Adaptee被适配者,就是需要被适配的接口. Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配. 应用场景: 如数据操作有mysql.mysqli.pdo.sqlite.postgresq

浅析php设计模式之数据对象映射模式_php实例

php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位. 数据映射模式使您能更好的组织你的应用程序与数据库进行交互. 数据映射模式将对象的属性与存储它们的表字段间的结合密度降低.数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然. 数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息 重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关

深入浅析php json 格式控制_php实例

关于 json 这个问题,陆陆续续有新手朋友找我问,比如为什么我输出的是 {"1":"item1","2":"item2","3":"item3"} 而不是 ["item1","item2","item3"]. php数组 与 js数组 我这里用 php 5.4 以上语法表示. php 里有关联数组和索引数组,例如: <?

浅析PHP7新功能及语法变化总结_php实例

标量类型声明 有两种模式: 强制 (默认) 和 严格模式. 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool).在旧版中,函数的参数声明只能是(Array $arr).(CLassName $obj)等,基本类型比如Int,String等是不能够被声明的 <?php function check(int $bool){ var_dump($bool); } check(1); check(tr

浅析get与post的一些特殊情况_php实例

最近在做一些有关文件上传等的工作,途中遇到了以下问题: 将表单以post方式提交给一个有参数的url(如:res.php?param=aaa),这样的得到的结果将会是什么呢? 下面就从几个例子将有关get与post的相关内容进行测试,首先看一下最简单的 <html> <body> <?php echo $_GET ['param']; ?> <form action="get_post_test.php?param=aaa" method=&q

浅析php如何实现App常用的秒发功能_php实例

前言 想象一下,我们平常发朋友圈的时候,N张图片配上文字,嗖的一下就发出去了,不带任何拖泥带水的那种,体验感觉好爽~. 但是我们停下来用技术手段思考一下,这可能吗?有些2G网络最多也就几十K网速,我们的图片随便一张都几M,即使压缩过也有几百K,怎么可能瞬间发出消息呢? 现在想想,是不是有些诡异呢~ 其实吧,众多社交软件(微博,微信)都是用了一种秒发机制.他并不是真的先去发送然后发送完毕再告诉你发送成功,而是直接告诉你发送成功,然后后台再偷偷去上传你发的东西,所以在网速不好的时候我们会经常发现一个