PHP设计模式之适配器模式原理与用法分析
程序员文章站
2022-09-01 22:10:02
本文实例讲述了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(); ?>
更多关于php相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。
上一篇: 蒸包子多长时间最为合适,爱吃包子就来看看
下一篇: PHP实现的猴王算法(猴子选大王)示例