设计模式之:适配器模式
适配器很容易理解, 大多数人家庭都有手机转接器, 用来为移动电话充电,这就是一种适配器. 如果只有USB接头, 就无法将移动电话插到标准插座上. 实际上, 必须使用一个适配器, 一端接USB插头, 一端接插座. 当然, 你可以拿出电气工具,改装USB连接头, 或者重新安装插座, 不过这样会带来很多额外的工作, 而且可能会把连接头或插座弄坏. 所以, 最可取的方法就是找一个适配器. 软件开发也是如此.
类适配器模式(使用继承)
class ChildClass extends ParentClass implements ISomeAdapter
{}
<?php
class DollarCalc
{private $dollar;private $product;private $service;public $rate = 1;public function requestCalc($productNow, $serviceNow){$this->product = $productNow;$this->service = $serviceNow;$this->dollar = $this->product + $this->service;return $this->requestTotal();}public function requestTotal(){$this->dollar *= $this->rate;return $this->dollar;}
}
<?php
class EuroCalc
{private $euro;private $product;private $service;public $rate = 1;public function requestCalc($productNow, $serviceNow){$this->product = $productNow;$this->service = $serviceNow;$this->euro = $this->product + $this->service;return $this->requestTotal();}public function requestTotal(){$this->euro *= $this->rate;return $this->euro;}
}
<?php
interface ITarget
{public function requester();
}
<?php
include_once('EuroCalc.php');
include_once('ITarget.php');
class EuroAdapter extends EuroCalc implements ITarget
{public function __construct(){$this->requester();}public function requester(){$this->rate = 0.8111;return $this->rate;}
}
<?php
include_once('EuroAdapter.php');
include_once('DollarCalc.php');
class Client
{public function __construct(){$euro = '€';echo "区元: $euro" . $this->makeApapterRequest(new EuroAdapter()) . '<br />';echo "美元: $: " . $this->makeDollarRequest(new DollarCalc()) . '<br />';}private function makeApapterRequest(ITarget $req){return $req->requestCalc(40,50);}private function makeDollarRequest(DollarCalc $req){return $req->requestCalc(40,50);}
}
$woker = new Client();
运行结果如下:
Euros: €72.999
Dollars: $: 90
使用组合的适配器模式
<?php
interface IFormat
{public function formatCSS();public function formatGraphics();public function horizontalLayout();
}
<?php
include_once('IFormat.php');
class Desktop implements IFormat
{public function formatCSS(){echo "引用desktop.css<br />";}public function formatGraphics(){echo "引用desktop.png图片<br />";}public function horizontalLayout(){echo '桌面:水平布局';}
}
<?php
interface IMobileFormat
{public function formatCSS();public function formatGraphics();public function verticalLayout();
}
<?php
include_once('IMobileFormat.php');
class Mobile implements IMobileFormat
{public function formatCSS(){echo "引用mobile.css<br />";}public function formatGraphics(){echo "引用mobile.png图片<br />";}public function verticalLayout(){echo '移动端:垂直布局';}
}
<?php
include_once('IFormat.php');
include_once('Mobile.php');
class MobileAdapter implements IFormat
{private $mobile;public function __construct(IMobileFormat $mobileNow){$this->mobile = $mobileNow;}public function formatCSS(){$this->mobile->formatCSS();}public function formatGraphics(){$this->mobile->formatGraphics();}public function horizontalLayout(){$this->mobile->verticalLayout();}
}
<?php
include_once('Mobile.php');
include_once('MobileAdapter.php');
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();}
}
$worker = new Client();
适配器和变化
转载于:https://www.cnblogs.com/wntd/p/9628391.html
设计模式之:适配器模式相关推荐
- C#设计模式(7)——适配器模式(Adapter Pattern)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将"将现存的对象" ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
[索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...
- 跟JBPM学设计模式之适配器模式
跟JBPM学设计模式之适配器模式 模式简介 适配器模式(Adapter),将一个类的接口转换成客户希望的另一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 说起适配器模式 ...
- python适配器模式角色_Python设计模式之适配器模式原理与用法详解
本文实例讲述了Python设计模式之适配器模式原理与用法.分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配 ...
- 【设计模式】—— 适配器模式Adapter
模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...
- 设计模式适配器模式_21世纪的设计模式:适配器模式
设计模式适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面. 在另一个世界,我们有不同的界面. 这两个接口有 ...
- Java面试题:单例设计模式、适配器模式的不同方式
QUESTION:单例设计模式.适配器模式的不同方式? ANSWER: 1.单例设计模式,适配器设计模式 单利设计模式: 在java中,单例模式是指为了保证类在内存中只 ...
- [学习笔记]设计模式[6]-{适配器模式外观模式}
设计原则 最少知识原则:只和你的密友谈话 这个原则的意思是,在系统设计的过程中,不要让太多的类耦合在一起,免得对系统一部分的修改会影响到其他部分.在设计系统之前,应该首先注意对象与对象之间的交互关系, ...
- 适配器模式_21世纪的设计模式:适配器模式
适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面: 在另一个世界中,我们有不同的界面. 这两个接口有不同的 ...
- 设计模式回顾——适配器模式(C++)
文章目录 1 前言 2 什么是适配器模式 2.1 生活中的适配器 2.2 适配器模式含义 2.3 适配器模式作用 3 适配器模式优缺点 3.1 适配器优缺点 3.2 类适配器优缺点 3.3 对象适配器 ...
最新文章
- Mysql报错Forcing close of thread 139 user: 'root'
- 《github一天一道算法题》:插入排序
- arcgis 点坐标python_Python写的arcgis中点坐标txt转面状shp的小程序
- Day 9 函数的初识1
- 基础算法 —— 排序算法
- 从程序员到项目经理(六):程序员加油站 -- 懂电脑更要懂人脑
- 雪城大学信息安全讲义 七、格式化字符串漏洞
- 2016.08.15
- Qtableview实现对某一列可编辑,对某几列不可编辑
- C++“准”标准库Boost学习指南(3):Boost.Utility
- 3D建模自学要学多久?
- LeetCode 661. Image Smoother
- matlab编程999玫瑰花,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
- bootstrap国内cdn库
- 爱否赢了?华为拍月亮方法已申请专利
- 声明对象和实例化对象的区别
- 题解 2360: [信息学奥赛一本通-T1449]魔板
- 【FFMPEG使用经验一】FFMPEG解码MP4帧数不对问题探索
- MATLAB怎么解方程解,怎么用Matlab解方程?
- 苹果库乐队怎么玩_苹果安卓手机最简单换铃声方法,无需电脑,简单一步就能换成流行歌曲...