PHP设计模式之委托模式定义与用法简单示例
本文实例讲述了PHP设计模式之委托模式定义与用法。分享给大家供大家参考,具体如下:
委托模式:
通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。
class Bank{ protected $info; /* 设置基本信息 @param string $type 类型。例如"RMB" @param int $money 利率。例如"0.4%" */ public function updateBrankInfo($type,$money){ $this->info[$type]=$money; } /* 相关操作(包括存款、取款操作) @param int $branktype 操作类型 */ public function brankWithdraw($branktype){ $obj=new $branktype; return $obj->brankMain($this->info); } } /* 委托接口 */ interface Delegate{ /* 操作方法: 实现该接口必须实现的方法 */ public function brankMain($info); } /* 存款操作类 */ class brankDeposit implements Delegate{ /* 存款操作 */ public function brankMain($info){ echo $info['deposit']; } } /* 取款操作类 */ class brankWithdraw implements Delegate{ /* 取款操作 */ public function brankMain($info){ echo $info['withdraw']; } } /* 客户端测试代码: */ $bank=new Bank(); $bank->updateBrankInfo("deposit","4000"); $bank->updateBrankInfo("withdraw","2000"); $bank->brankWithdraw("brankDeposit"); echo "<br>"; $bank->brankWithdraw("brankWithdraw");
运行结果:
4000
2000
传统方式:
在传统方式下,我们需要判断当前操作是取款操作还是存款操作,在分别调用Bank类中的取款操作和存款操作。
委托模式:
在委托模式下,我们将不需要客户端的判断操作,对客户端来说,需要什么操作,直接传入操作类型即可,Bank类可自动判断操作类型,返回相应操作的操作结果。当我们的操作类型非常多的时候,在客户端用if else
判断无疑是很可怕的,再假如我们在很多地方都要有这块判断代码,我们需要对这些地方的判断代码都进行修改(加入后来添加的判断),而采用委托模式,我们仅仅需要在新添加的地方添加相应需要的类型即可,不需要改动其它地方的客户端代码(很大程度上提高了代码的复用性)。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
PHP __call()方法实现委托示例
本文实例讲述了PHP __call()方法实现委托.分享给大家供大家参考,具体如下: 委托是指一个对象转发或者委托一个请求给另一个对象,被委托的一方替原先对象处理请求.这类似于继承,和在子类中调用父类的方法有点儿相似. 但在继承时,父类与子类的关系是固定的,而使用委托则可以在代码运行时改变使用的对象,这意味着委托比继承具有更大的灵活性. 1.创建一个类来将Person类的信息格式化并输出: class PersonWriter{ public function writeName(Persion
-
用PHP的反射实现委托模式的讲解
委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理.委托模式是一项基本技巧,许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式. 动态委托的介绍:动态委托概念来自于Jakarta 字节码工程库 (Byte-Code Engineering Library, BCEL).它能够分析存在的类,并且对于接口,抽象类,甚至运行时的具体类来说,它能够生成以字节编码委托类. 被委托的接口/类应该满足
-
PHP常用设计模式之委托设计模式
模式定义 委托是对一个类的功能进行扩展和复用的方法.它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能. 假设我们有一个 TeamLead 类,将其既定任务委托给一个关联辅助对象 JuniorDeveloper 来完成:本来 TeamLead 处理 writeCode 方法,Usage 调用 TeamLead 的该方法,但现在 TeamLead 将 writeCode 的实现委托给 JuniorDeveloper 的 writeBadCode 来实现,但 Usage 并
-
PHP魔术方法之__call与__callStatic使用方法
核心代码 //魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ class Human { private function t(){ } public function __call($method,$arg){ echo '你想调用我不存在的方法',$method,'方法<br/>'; echo '还传了一个参数<br/>'; echo print_r($arg),'<br/>'; } public static funct
-
php设计模式之委托模式
委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理.委托模式是一项基本技巧,许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式. 动态委托的介绍:动态委托概念来自于Jakarta 字节码工程库 (Byte-Code Engineering Library, BCEL).它能够分析存在的类,并且对于接口,抽象类,甚至运行时的具体类来说,它能够生成以字节编码委托类. 被委托的接口/类应该满足
-
php数据库操作model类(使用__call方法)
本文实例讲述了php数据库操作model类.分享给大家供大家参考,具体如下: 该数据库操作类使用__call()方法实现了数据的查找功能. 代码如下: <?php /* 作者 : shyhero */ define("HOSTNAME","127.0.0.1"); define("USERNAME","root"); define("PASSWORD",""); define(&q
-
php设计模式 Delegation(委托模式)
复制代码 代码如下: <?php /** * 委托模式 示例 * * @create_date: 2010-01-04 */ class PlayList { var $_songs = array(); var $_object = null; function PlayList($type) { $object = $type."PlayListDelegation"; $this->_object = new $object(); } function addSong
-
php魔术函数__call()用法实例分析
本文实例分析了php魔术函数__call()用法.分享给大家供大家参考.具体如下: php魔术函数__call()的介绍,看完下面的实例就明白了: <?php class A{ public $name; function test1($a){ echo "test1111"; } function test2($a){ echo "test2222"; } //当某个对象调用某个方法,而当该方法不存在时,则系统会自动调用__call() function _
-
PHP设计模式之委托模式定义与用法简单示例
本文实例讲述了PHP设计模式之委托模式定义与用法.分享给大家供大家参考,具体如下: 委托模式: 通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性. class Bank{ protected $info; /* 设置基本信息 @param string $type 类型.例如"RMB" @param int $money 利率.例如"0.4%" */ public function updateBrankInfo($type,$money
-
PHP设计模式之建造者模式定义与用法简单示例
本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需要的仅仅是实例化后的类对象(大多数情况下是需要类的属性). 2.传统方式下当类有了之后,一般直接通过new class()的方式直接进行实例化,然后通过$obj->set1()构建属性1,$obj->set2()构建属性2,$obj->set3()构建属性3... 3.传统方式有一个很大的弊
-
PHP设计模式之装饰器模式定义与用法简单示例
本文实例讲述了PHP设计模式之装饰器模式定义与用法.分享给大家供大家参考,具体如下: 装饰器模式: 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式. 简单点说:就是我们不应该去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展其需要修改的内容,这样做的好处就是---- 1.我们可以保证类的层次不会因过多而发生混乱. 2.当我们需求的修改很小时,不用改变原有的数据结构. 代码引用自<PHP设计模
-
JS设计模式之访问者模式定义与用法分析
本文实例讲述了JS设计模式之访问者模式定义与用法.分享给大家供大家参考,具体如下: 在访问者模式中,主要包括下面几个角色 1.抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的. 2.访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情. 3.抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的.抽象元素一般有两类方法,一部分是本身的业务逻辑,另外
-
PHP设计模式之状态模式定义与用法详解
本文实例讲述了PHP设计模式之状态模式定义与用法.分享给大家供大家参考,具体如下: 什么是状态设计模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. 什么时候使用状态模式 对象中频繁改变非常依赖于条件语句. 就其自身来说, 条件语句本身没有什么问题(如switch语句或带else子句的语句),不过, 如果选项太多, 以到程序开
-
PHP设计模式之模板方法模式定义与用法详解
本文实例讲述了PHP设计模式之模板方法模式定义与用法.分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMethod(), 该方法是抽象类中的一个具体方法, 这个方法的作用是对抽象方法序列排序,具体实现留给具体类来完成.关键在于模板方法模式定义了操作中算法的"骨架",而由具体类来实现. 什么时候使用模板方法 如果已经明确算法中的一些步骤, 不过这些步骤可以采用多种不同的方法实现, 就可以使用模板方法
-
PHP设计模式之工厂模式定义与用法详解
本文实例讲述了PHP设计模式之工厂模式定义与用法.分享给大家供大家参考,具体如下: 工厂模式(Factory Design Pattern)作为一种创建型设计模式, 遵循了开放-封闭原则, 对修改封闭, 对扩展开放. 工厂方法(Factory Method)模式就是要创建"某种东西". 对于工厂方法模式, 要创建的"东西"是一个产品,这个产品与创建它的类之间不存在绑定.实际上,为了保持这种松耦合,客户会通过一个工厂发出请求. 再由工厂创建所请求的产品.也可以换种方式
-
PHP设计模式之模板模式定义与用法详解
本文实例讲述了PHP设计模式之模板模式定义与用法.分享给大家供大家参考,具体如下: 模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现. UML类图: 角色: 抽象模板角色(MakePhone):抽象模板类,定义了一个具体的算法流程和一些留给子类必须实现的抽象方法. 具体子类角色(XiaoMi):实现Ma
-
PHP设计模式之原型模式定义与用法详解
本文实例讲述了PHP设计模式之原型模式定义与用法.分享给大家供大家参考,具体如下: 原型设计模式(Prototype Design Pattern)很有意思, 因为它使用了一种克隆技术来复制实例化的对象. 新对象是通过复制原型实例来创建的. 在这里, 实例是批实例化的具体类.原型设计模式的目的是通过使用克隆来减少实例化对象的开销.与其从一个类实例化新对象, 完全可以使用一个已有实例的克隆. 克隆函数 PHP中使用原型设计模式的关键是要了解如何使用内置函数__clone(). <?php abst
-
Java设计模式之策略模式定义与用法详解
本文实例讲述了Java策略模式定义与用法.分享给大家供大家参考,具体如下: 一. 定义: 定义一系列算法,把他们一个一个封装起来,并且使他们可以相互替换. 二. 优点: (1)上下文(Context)和具体策略(ConcreteStrategy)是松耦合关系,因此上下文只需要知道他要使用某一个实现 Strategy接口类的实例,但不需要知道是哪个类. (2)策略模式满足开闭原则,当增加新的具体类时,不需要修改上下文类的代码,上下文即可以引用新的具体策略的实例. 三. 实例: 下面就通过一个问题
随机推荐
- 零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
- jquery实现侧边弹出的垂直导航
- Win2008 R2 IIS7.5+PHP5(FastCGI)+MySQL5环境搭建教程
- oracle 集合
- ASP.net做的IP访问限制
- 使用Lucene.NET实现站内搜索
- 微信公众号-获取用户信息(网页授权获取)实现步骤
- JQuery实现简单验证码提示解决方案
- MySQL性能分析及explain的使用说明
- PHP+jQuery 注册模块开发详解
- 对分区表进行alter-switch时遇到的错误
- C++编程中私有和保护以及公有的类成员访问控制
- jquery文本框中的事件应用以输入邮箱为例
- 数组Array进行原型prototype扩展后带来的for in遍历问题
- 不错的Javascript表格翻页效果
- 服务器端的JavaScript脚本 Node.js 使用入门
- spring aop action中验证用户登录状态的实例代码
- 浅谈PHP调用Webservice思路及源码分享
- 使用vux实现上拉刷新功能遇到的坑
- jQuery中元素选择器(element)简单用法示例