PHP设计模式之适配器模式原理与用法分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-15 10:16:05 浏览: 评论:0
这篇文章主要介绍了PHP设计模式之适配器模式,简单描述了适配器模式的概念、原理并结合实例形式分析了php类适配器模式与对象适配器模式的具体定义与使用方法,需要的朋友可以参考下。
本文实例讲述了PHP设计模式之适配器模式原理与用法,分享给大家供大家参考,具体如下:
一、什么是适配器模式
适配器模式有两种:类适配器模式和对象适配器模式。其中类适配器模式使用继承方式,而对象适配器模式使用组合方式。由于类适配器模式包含双重继承,而PHP并不支持双重继承,所以一般都采取结合继承和实现的方式来模拟双重继承,即继承一个类,同时实现一个接口。类适配器模式很简单,但是与对象适配器模式相比,类适配器模式的灵活性稍弱。采用类适配器模式时,适配器继承被适配者并实现一个接口;采用对象适配器模式时,适配器使用被适配者,并实现一个接口。
二、什么时候使用适配器模式
适配器模式的作用就是解决兼容性问题,如果需要通过适配(使用多重继承或组合)来结合两个不兼容的系统,那就使用适配器模式。
三、类适配器模式
以货币兑换为例:
- <?php
- /**
- * 类适配器模式
- * 以货币兑换为例
- **/
- //美元计算类
- class DollarCalc
- {
- private $dollar;
- private $product;
- private $service;
- public $rate = 1;
- public function requestCalc($product,$service)
- {
- $this->product = $product;
- $this->service = $service;
- $this->dollar = $this->product + $this->service;
- return $this->requestTotal();
- }
- public function requestTotal()
- {
- $this->dollar *= $this->rate;
- return $this->dollar;
- }
- }
- //欧元计算类
- class EuroCalc
- {
- private $euro;
- private $product;
- private $service;
- public $rate = 1;
- public function requestCalc($product,$service)
- {
- $this->product = $product;
- $this->service = $service;
- $this->euro = $this->product + $this->service;
- return $this->requestTotal();
- }
- public function requestTotal()
- {
- $this->euro *= $this->rate;
- return $this->euro;
- }
- }
- //欧元适配器接口
- interface ITarget
- {
- function requester();
- }
- //欧元适配器实现
- class EuroAdapter extends EuroCalc implements ITarget
- {
- public function __construct()
- {
- $this->requester();
- }
- function requester()
- {
- $this->rate = .8111;
- return $this->rate;
- }
- }
- //客户类
- class Client
- {
- private $euroRequest;
- private $dollarRequest;
- public function __construct()
- {
- $this->euroRequest = new EuroAdapter();
- $this->dollarRequest = new DollarCalc();
- $euro = "€";
- echo "Euros: $euro" . $this->makeAdapterRequest($this->euroRequest) . "<br />";
- echo "Dollars: $" . $this->makeDollarRequest($this->dollarRequest);
- }
- private function makeAdapterRequest(ITarget $req)
- {
- return $req->requestCalc(40,50);
- }
- private function makeDollarRequest(DollarCalc $req)
- {
- return $req->requestCalc(40,50);
- }
- }
- $client = new Client();
- ?>
运行结果:
Euros: €72.999
Dollars: $90
四、对象适配器模式
以桌面环境转向移动环境为例:
- <?php
- /**
- * 对象适配器模式
- * 从桌面环境转向移动环境
- **/
- //桌面布局接口
- interface IFormat
- {
- public function formatCSS();
- public function formatGraphics();
- public function horizontalLayout();
- }
- //桌面布局类实现
- class Desktop implements IFormat
- {
- public function formatCSS()
- {
- //调用桌面布局CSS文件
- }
- public function formatGraphics()
- {
- //调用图片
- }
- public function horizontalLayout()
- {
- //桌面水平布局
- }
- }
- //移动布局接口
- interface IMobileFormat
- {
- public function formatCSS();
- public function formatGraphics();
- public function verticalLayout();
- }
- //移动布局类实现
- class Mobile implements IMobileFormat
- {
- public function formatCSS()
- {
- //调用移动布局CSS文件
- }
- public function formatGraphics()
- {
- //调用图片
- }
- public function verticalLayout()
- {
- //移动垂直布局
- }
- }
- //移动布局适配器
- class MobileAdapter implements IFormat
- {
- private $mobile;
- public function __construct(IMobileFormat $mobile)
- {
- $this->mobile = $mobile;
- }
- public function formatCSS()
- {
- $this->mobile->formatCSS();
- }
- public function formatGraphics()
- {
- $this->mobile->formatGraphics();
- }
- public function horizontalLayout()
- {
- $this->mobile->verticalLayout();
- }
- }
- //客户类
- class Client
- {
- private $mobile;
- private $mobileAdapter;
- public function __construct()
- {
- $this->mobile = new Mobile();
- $this->mobileAdapter = new MobileAdapter($this->mobile);
- $this->mobileAdapter->formatCSS();
- $this->mobileAdapter->formatGraphics();
- $this->mobileAdapter->horizontalLayout();
- }
- }
- $client = new Client();
- ?>
Tags: PHP设计模式 PHP适配器模式
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之适配器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之原型模式定义与用法详解(2021-09-06)
- ·PHP设计模式之工厂模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)