php 适配器模式的学习笔记

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

【主要角色】

目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的
源(Adaptee)角色:需要进行适配的接口
适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类
【适用性】
1、你想使用一个已经存在的类,而它的接口不符合你的需求
2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)

//目标角色 
interface Target { 
    public function simpleMethod1(); 
    public function simpleMethod2(); 

 
//源角色 
class Adaptee { 
     
    public function simpleMethod1(){ 
        echo 'Adapter simpleMethod1'."<br>"; 
    } 

 
//类适配器角色 
class Adapter implements Target { 
    private $adaptee; 
     
     
    function __construct(Adaptee $adaptee) { 
        $this->adaptee = $adaptee;  
    } 
     
    //委派调用Adaptee的sampleMethod1方法 
    public function simpleMethod1(){ 
        echo $this->adaptee->simpleMethod1(); 
    } 
     
    public function simpleMethod2(){ 
        echo 'Adapter simpleMethod2'."<br>";    
    }  
     

 
//客户端 
class Client { 
     
    public static function main() { 
        $adaptee = new Adaptee(); 
        $adapter = new Adapter($adaptee); 
        $adapter->simpleMethod1(); 
        $adapter->simpleMethod2();  
    } 

 
Client::main();

 【运行结果】

Adapter simpleMethod1
Adapter simpleMethod2

例子2

生活中最常见到的足球换人机制

<?php
/**
* Created by PhpStorm.
*/
//-------------抽象接口---------------
/**抽象运动员
* Interface IPlayer
*/
interface SoccerPlayer
{
function Attack();
function Defense();
}
 
/**前锋
* Class Forward
*/
class Forward implements SoccerPlayer
{
 
function Attack()
{
echo "前锋攻击<br/>";
}
 
function Defense()
{
echo "前锋防御<br/>";
}
}
 
/**中锋
* Class Center
*/
class Center implements SoccerPlayer
{
 
function Attack()
{
echo "中锋攻击<br/>";
}
 
function Defense()
{
echo "中锋防御<br/>";
}
}
 
//--------------待适配对象-----------
/**梅西 刚进入罢赛的运动员
* Class Yaoming
*/
class Messi
{
function 进攻()
{
echo "梅西进攻<br/>";
}
 
function 防御()
{
echo "梅西防御<br/>";
}
}
 
//------------适配器--------------
/**适配器
* Class Adapter
*/
class Adapter implements SoccerPlayer
{
private $_player;
 
function __construct()
{
$this->_player=new Messi();
}
 
function Attack()
{
$this->_player->进攻();
}
 
function Defense()
{
$this->_player->防御();
}
}

测试如下

$player1=new Forward();
 
echo "前锋上场:<br/>";
$player1->Attack();
$player1->Defense();
 
echo "<hr/><br/>";
 
echo "梅西上场:<br/>";
$Messi=new Adapter();
$Messi->Attack();
$Messi->Defense();

时间: 2024-10-29 12:15:14

php 适配器模式的学习笔记的相关文章

设计模式学习笔记系列

设计模式学习笔记(二十二)-FlyWeight享元模式 设计模式学习笔记(二十一)-Composite模式 设计模式学习笔记(二十)-Visitor访问者模式 设计模式学习笔记(十九)-Chain of Responsibility职责链模式 设计模式学习笔记(十八)-Mediator中介者模式 设计模式学习笔记(十七)-Memento备忘录模式 设计模式学习笔记(十六)-Proxy模式 设计模式学习笔记(十五)-State模式 设计模式学习笔记(十四)-Command模式 设计模式学习笔记(十

JetSpeed学习笔记(一)

笔记 JetSpeed学习笔记(一) fuweilin 2005-4-7 前言 参加了公司的portal的兴趣小组,今天对portal进行学习.首先上网看了看一些portal的资料,对portal.portlet.portlet container以及JSR168等概念有个基本的了解.决定进一步实战的方式感受portal,于是学习JetSpeed.     1.  JetSpeed介绍JetSpeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现.门户可以让终端

PHP输入输出流学习笔记

  这篇文章主要介绍了PHP输入输出流学习笔记,PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符,内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器,需要的朋友可以参考下 PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符, 内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器. php://stdin, php://stdout 和 php://std

PHP学习笔记 (1) 环境配置与代码调试

一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

Node.js 学习笔记之简介、安装及配置

 本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法.软件安装版本以0.12.0为例.希望大家能够喜欢.     简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅

node.js学习笔记(9) 和谐模式

众所周知,ECMAScript 是一种开放的.国际上广为接受的脚本语言规范. 它本身并不是一种脚本语言.正如在 Web 应用程序中执行有用操作的 bean 集合(例如,Netscape 的 AWT)是 Sun 的 JavaBean 规范的一种实现一样,JavaScript 是 ECMAScript 规范的一种实现. 2015年6月17日,ECMA国际发布了EcmaScript2015,即EcmaScript6(以下简称ES6)草案的正式版.ES6是继ES5之后的一次主要改进,语言规范由ES5.1

php5学习笔记(转)

php5|笔记 作者: whhwq在phpv.net看到的感觉不错/*+-------------------------------------------------------------------------------+| = 本文为Haohappy读<<Core PHP Programming>> | = 中Classes and Objects一章的笔记 | = 翻译为主+个人心得 | = 为避免可能发生的不必要的麻烦请勿转载,谢谢 | = 欢迎批评指正,希望和所有

动态网页学习:JSP学习笔记全记录

js|笔记|动态|网页 JSP学习笔记(一)-----概述 JSP学习笔记(二)-----使用Tomcat运行JSP文件 JSP学习笔记(三)-----使用JSP处理用户注册和登陆 JSP学习笔记(四)-----JSP动作的使用 JSP学习笔记(五)-----JSP中使用JavaBean JSP学习笔记(六)-----在多个JSP页面之间传递参数 JSP学习笔记(七)-----猜数字游戏 JSP学习笔记(八)-----include的运用 JSP学习笔记(九)-----JSP标签库

java对象序列化学习笔记

java对象|笔记 目前网络上关于对象序列化的文章不少,但是我发现详细叙述用法和原理的文章太少.本人把自己经过经验总结和实际运用中的体会写成的学习笔记贡献给大家.希望能为整个java社区的繁荣做一点事情.    序列化的过程就是对象写入字节流和从字节流中读取对象.将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序列化功能非常简单.强大,在RMI.Socket.JMS.EJB都有应用.对象序列化问题在网