声明:本系列博客参考资料《大话设计模式》,作者程杰。

适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的(适配器模式要解决的核心问题)。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

类图:

待适配(ForeignPlayer)角色:此角色的接口规则内部的接口规则不一致,但内部需要调用该角色的方法功能。

内部接口(IPlayer)角色:这是一个抽象角色,此角色给出内部期待的接口规则。

适配器(Adapter)角色:通过在内部包装一个Adapter对象,把待适配接口转换成目标接口,此角色为适配器模式的核心角色,也是适配器模式所解决问题的关键。

代码:

<?php
/*** Created by PhpStorm.* User: Jiang* Date: 2015/4/26* Time: 12:23*/
//-------------抽象接口---------------
/**抽象运动员* Interface IPlayer*/
interface IPlayer
{function Attack();function Defense();
}/**前锋* Class Forward*/
class Forward implements IPlayer
{function Attack(){echo "前锋攻击<br/>";}function Defense(){echo "前锋防御<br/>";}
}/**中锋* Class Center*/
class Center implements IPlayer
{function Attack(){echo "中锋攻击<br/>";}function Defense(){echo "中锋防御<br/>";}
}//--------------待适配对象-----------
/**姚明                 外籍运动员* Class Yaoming*/
class Yaoming
{function 进攻(){echo "姚明进攻<br/>";}function 防御(){echo "姚明防御<br/>";}
}//------------适配器--------------
/**适配器* Class Adapter*/
class Adapter implements IPlayer
{private $_player;function __construct(){$this->_player=new Yaoming();}function Attack(){$this->_player->进攻();}function Defense(){$this->_player->防御();}
}

客户端测试代码:

header("Content-Type:text/html;charset=utf-8");
//------------------------原型模式测试代码------------------
require_once "./Adapter/Adapter.php";$player1=new Forward();echo "前锋上场:<br/>";
$player1->Attack();
$player1->Defense();echo "<hr/><br/>";echo "姚明上场:<br/>";
$yaoming=new Adapter();
$yaoming->Attack();
$yaoming->Defense();

适用场景

1.接口中规定了所有要实现的方法

2.但要有一个实现此接口的具体类,只用到了其中的几个方法,而其它的方法都是没有用的。

注意事项

1.充当适配器角色的类就是实现已有接口的抽象类

2.为什么要用抽象类:

此类是不要被实例化的。而只充当适配器的角色,也就为其子类提供了一个共同的接口,但其子类又可以将精力只集中在其感兴趣的地方。

欢迎关注我的视频课程,地址如下,谢谢。

PHP面向对象设计模式

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. 深入理解C语言的define
  2. delphi 只允许运行一个实例的三种方法《转》
  3. ASP.NET Core 中文文档 第二章 指南(4.5)使用 SQL Server LocalDB
  4. 面试:Spring Boot 中的条件注解底层是如何实现的?
  5. ITK:过滤器Filter和ParallelizeImageRegion比较
  6. camunda 流程执行追踪_九思OA项目管理解决方案:规范企业项目流程,掌握项目进展...
  7. Springmvc中的拦截器interceptor及与过滤器filter的区别
  8. 关于选择排序的优化——同时找出最小值与最大值
  9. 取石子游戏(信息学奥赛一本通-T1218)
  10. scal的函数定义(day01)
  11. Python使用最小二乘法求解回归直线案例一则
  12. 【CSP201312-1 】出现次数最多的数,排序后扫描并记录
  13. memset()函数及其作用
  14. XJOI 9291 Hello OI
  15. 1005打印任务取消不了 hp_1005打印任务取消不了 hp_解决hp1005打印机无法打印故障...
  16. 计算机课搞事情检讨,【热门】作弊检讨书范文10篇
  17. 机器人操作系统ROS(9)Gazebo物理仿真(摄像头仿真)
  18. 中秋佳节│以码为笔,绘合家团圆
  19. ansible使用之——网络设备自动巡检
  20. Bernoulli Number

热门文章

  1. 2019pro与air怎么选_MacBookAir 2020和MacBookPro 2019该选谁?超详细对比告诉你
  2. 读称题写出执行结果html,C++(II)13-14(2)试题B - 往年试卷
  3. mysql的collate_MYSQL中的COLLATE是什么?
  4. SQL SERVER 2000 数据库备份和SQL Server数据库备份有两种方式,
  5. qzone.class.php,PHP QQ登录接口应用_PHP教程 - str_repeat
  6. java restclient 调用_restclient 访问 springmvc java工程接口
  7. 目标检测(十)--SSD
  8. java中的事件派发机制_事件派发器模式
  9. Kafka日志刷新策略
  10. kafka从头消费信息