




已阅读5页,还剩119页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精通php设计模式各个击破案例测试源码设计模式 对应特点【原】 PHP 设计模式二十三之解释器设计模式 迷你新语言【原】 PHP 设计模式二十二之迭代子设计模式 循环【原】 PHP 设计模式二十一之访问者设计模式 数据处理与数据结构分离【原】 PHP 设计模式二十之模板设计模式 规范执行骨架【原】 PHP 设计模式十九之享元设计模式 共享细微粒,减少开销【原】 PHP 设计模式十八之备忘录设计模式 存档【原】 PHP 设计模式十七之外观设计模式 统一接口,方便组合【原】 PHP 设计模式十六之状态设计模式 有序开关状态,【原】 PHP 设计模式十五之中介者设计模式 中介【原】 PHP 设计模式十四之职责链设计模式 传递命令【原】 PHP 设计模式十三之命令设计模式 命令集中处理,命令看成对象【原】 PHP 设计模式十二之组合设计模式 整体与部分一致【原】 PHP 设计模式十一之桥接设计模式 抽象与现实分离【原】 PHP 设计模式十之建造者设计模式 构建和表示分离【原】 PHP 设计模式九之单例设计模式 唯一实例【原】 PHP 设计模式八之观察者设计模式 数组 1对多通知【原】 PHP 设计模式七之原型设计模式 克隆【原】 PHP 设计模式六之代理设计模式 代理处理 【原】 PHP 设计模式五之工厂方法设计模式 批量实例,抽象【原】 PHP 设计模式四之适配器设计模式 不同接口【原】 PHP 设计模式三之策略设计模式 算法【原】 PHP 设计模式二之修饰器模式 包裹原数据【原】 PHP 设计模式一之简单工厂模式 批量实例PHP 设计模式一之(简单)工厂模式边学习理论边实践才是真!工厂模式: 简单工厂模式 工厂方法模式 抽象工厂模式后面我会一一写出,并分析他们区别,优缺下面是学习后模拟写的代码?php/* * 计算器 OOP开发 练习 简单的工厂模式 * 目前运算符号暂定为:加减乘除,以后会扩展平方等 * 定义:经过一定的逻辑,需要实例对应的对象对象可以完全不同,经常配合策略模式使用这里的对象有相似性 * author Chen Wei Han * copyright Copyright © 2011 Chen Wei Han * link * version $Id: Calculator.php 1 2011-05-31 * since 1.0 * package OOP * example * */* * 运算符抽象类 * * author Chen Wei Han * package OOP */abstract class Abstract_Operation /* * 定义私有变量 * * var $numa */ private $numa; /* * 定义私有变量 * * var $numb */ private $numb; public function Getnuma() return $this-numa; public function Setnuma($num) $this-numa=$num; public function Getnumb() return $this-numb; public function Setnumb($num) $this-numb=$num; /* * 抽象方法GetResult 返回结果 */ abstract protected function GetResult();/* * 加法子类 * * author Chen Wei Han * package OOP */class OperationAdd extends Abstract_Operation public function GetResult() $result = $this-Getnuma() + $this-Getnumb(); return $result; /* * 减法子类 * * author Chen Wei Han * package OOP */class OperationSub extends Abstract_Operation public function GetResult() $result = $this-Getnuma() - $this-Getnumb(); return $result; /* * 乘法子类 * * author Chen Wei Han * package OOP */class OperationMul extends Abstract_Operation public function GetResult() $result = $this-Getnuma() * $this-Getnumb(); return $result; /* * 除法子类 * * author Chen Wei Han * package OOP */class OperationDiv extends Abstract_Operation public function GetResult() $result = $this-Getnuma() / $this-Getnumb(); return $result; /* * 运算符工厂类 * * author Chen Wei Han * package OOP */class OperationFactory /* * 构建运算符对象方法 * * param $operation * return class $oper */ public static function GreateOperation($operation) switch ($operation) case 1: $oper = new OperationAdd(); break; case 2: $oper = new OperationSub(); break; case 3: $oper = new OperationMul(); break; case 4: $oper = new OperationDiv(); break; default: echo err!; die(); break; return $oper; /* * 运算主函数 * * param int $firstnum * param int $secondnum * param int $operation * return int $oper-GetResult(); * package OOP */function Calculate($firstnum,$secondnum,$operation) /静态调用 $oper = OperationFactory:GreateOperation($operation); $oper-Setnuma($firstnum); $oper-Setnumb($secondnum); $oper-GetResult(); return $oper-GetResult();/* * 获取参数 */$firstnum = intval($_POSTfirstnum);$secondnum = intval($_POSTsecondnum);$operation = trim($_POSToperation); echo 计算结果:.Calculate($firstnum,$secondnum,$operation); ? 静态 请输入第一个参数: 选择运算符 请选择 加 减 乘 除 请输入第二个参数: PHP 设计模式二之修饰器模式?phpheader(Content-type: text/html; charset=utf-8); /* * 人的服饰穿着搭配 装饰器设计模式 * 服饰暂定为短袖 短裤 * 定义:在不需要修改原有数据模型的基础上,应对需求多变的处理功能。 * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * link * package demo * version $Id: trappings 1 2011-06-01 */* * 实体Person类 * * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * package demo */class Person private $Username = chenweihan; public function setPerson($username) $this-Username = $username; public function decorate() return 搭配穿着的.$this-Username; /* * 抽象服饰修饰类 * * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * package demo */abstract class Weartrappings protected $value; public function _construct($value) $this-value = $value; abstract public function decorate();/* * 服饰短袖子类 * * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * package demo */class Cotta extends Weartrappings public function _construct($value) parent:_construct($value); public function decorate() return 短袖子 .$this-value-decorate(); /* * 服饰短裤子类 * * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * package demo */class Shorts extends Weartrappings public function _construct($value) parent:_construct($value); public function decorate() return 短裤子 .$this-value-decorate(); $decorate = new Person();$decorate = new Cotta($decorate);$decorate = new Shorts($decorate);echo $decorate-decorate();PHP 设计模式三之策略设计模式?phpheader(Content-type: text/html; charset=utf-8);/* * 商城促销活动 策略设计模式 * 促销活动暂定为 1:100-200返利10% 2:200以上返利20% * * 以前案例中的设计模式一之工厂模式计算器也可以组合使用策略模式,选择不同的计算本身就是不同的策略 * Template模式:模板方法模式与策略模式的不同在于,策略模式使用委派的方法提供不同的算法行为,而模板方法使用继承的方法提供不同的算法行为, * Template模式 特点重在规范,约束流程。 * * 定义:根据需求的不同,替换不同的策略对象(逻辑运算等一般在类内部)应对 * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * link * package demo * version $Id: strategy.php 1 2011-06-01 */* * 促销活动抽象类 * * author Chen Wei Han * package demo */abstract class abstract_Salespromotion protected $value; public function _construct($value) $this-value = $value; abstract public function GetResult();/* * 促销活动返利10%子类 * * author Chen Wei Han * package demo */class StrategyRebateA extends abstract_Salespromotion public function _construct($value) parent:_construct($value); public function GetResult() return $this-value*9/10; /* * 促销活动返利20%子类 * * author Chen Wei Han * package demo */class StrategyRebateB extends abstract_Salespromotion public function _construct($value) parent:_construct($value); public function GetResult() return $this-value*4/5; /* * 无促销活动正常返回 * * author Chen Wei Han * package demo */class StrategyRebateC extends abstract_Salespromotion public function _construct($value) parent:_construct($value); public function GetResult() return $this-value; /* * 调用策略类 * * author Chen Wei Han * package demo */class UseStrategy /* * 定义策略变量 * * var $result */ private $_strategy; /* * 构造函数 * * param $value */ public function _construct($strategy) $this-_strategy = $strategy; /* * 使用策略对象 * */ public function Strategy() return $this-_strategy-GetResult(); /* * 判断策略类 * * author Chen Wei Han * package demo */class GetStrategy private $result; private $type; public function BackResult($value) if($value=100 & $valuetype=A; else if($value200) $this-type=B; else $this-type=C; $ClassName = StrategyRebate.$this-type; $UseStrategy = new UseStrategy(new $ClassName($value); $this-result = $UseStrategy - Strategy(); return $this-result; /假设用户A购买了100元 用户B购买了200元$UserA=150;$UserB=250;$getstrategy = new GetStrategy;echo $getstrategy-BackResult($UserA);echo $getstrategy-BackResult($UserB);PHP 设计模式四之适配器设计模式?phpheader(Content-type:text/html; charset=utf-8);/* * 获取数据格式不同 适配器设计模式 类适配器(继承)和对象适配器(委派)推荐使用对象适配器,更能降低耦合关系,下面案例使用的是对象适配器。 * 获取数据格式暂定为 获取数据的结构大部分已定,原来对象返回的是数组 现在另外一个接口需要返回json 两种 * * 区别装饰器模式(decorator模式):装饰模式增强了其他对象的功能而同时又不改变它的接口,适配器模式需要修改扩展接口。 * 装饰修改的功能一般存在可以叠加,而适配器的一般是不需要的。 * * author Chen Wei Han * copyright Chen Wei Han 2011.06.02 * link * package demo * version $Id: adapter.php 1 2011-06-02 */* * 数据源角色类 * * author Chen Wei Han * package demo */class Data private $arr = array(1=a,2=b,3=c); public function getdata() return $this-arr; /* * 适配器角色接口 */interface interface_Adapter public function backarr(); public function backjson(); /* * 数组返回格式 数组类 以前存在的 * * author Chen Wei Han * package demo */class Backarr private $_data; public function setdata($data) $this-_data = $data; public function GetResult() return $this-_data-getdata(); /* * 数据格式返回 json类 现在新加的 * * author Chen Wei Han * package demo */class Adapter implements interface_Adapter private $_adapterarr; private $_data; public function _construct(backarr $backarr_class) $this-_adapterarr = $backarr_class; public function setdata($data) $this-_data = $data; public function backarr() $this-_adapterarr-setdata($this-_data); return $this-_adapterarr-GetResult(); public function backjson() return json_encode($this-_data-getdata(); /* * 调用 */数据源$data = new Data();/以前老接口$backarr = new Backarr();/适配器接口 $adapter = new Adapter($backarr);/设置数据源$adapter-setdata($data);/返回数组格式print_r ($adapter-backarr($data);/返回json格式print_r ($adapter-backjson($data);/* * 如果第三方接口的函数已经定死也就是GetResult,那么你可以继承Backarr,然后重写json返回函数为GetResult,就能完美解决你和第三方的问题。 * 理论是死的,实际应用是需要灵活多变的 */PHP 设计模式五之工厂方法设计模式?phpheader(Content-type:text/html;charset=utf-8);/* * 计算器简单 工厂方法模式 * 目前运算符号暂定为:加减 * 定义:经过一定的逻辑,需要实例对应的对象对象可以完全不同,经常配合策略模式使用这里的对象有相似性 * * 前面设计模式一的简单工厂模式与这里的工厂方法模式的区别 * 简单工厂模式,是在一个工厂类里创建产品类,这里存在一个问题,如果增加产品就会去修改工厂类,违背了开发-封闭原则 * 工厂方法模式,对应产品类是在其工厂子类里创建的,如果增加产品不需要修改以前结构,只需要增加一个子类即可,这样系统更容易扩展,维护,保持结构的稳定性 * 当然具体的使用,得根据需求来定,把创建类延迟到相应的子类,会有一点效率和资源的小问题。 * 缺点:简单工厂模式把选择放在了工厂里 ,但工厂方法把选择放在工厂外,但还是存在选择的if或者switch * * author Chen Wei Han * copyright Chen Wei Han 2011.06.02 * link * package demo * version $Id: factorymethod.php 1 2011-06-02 */* * 产品(运算符运算结果)抽象角色类 */abstract class Abstract_Operation /* * 定义私有变量 * * var $numa */ private $numa; /* * 定义私有变量 * * var $numb */ private $numb; public function Getnuma() return $this-numa; public function Setnuma($num) $this-numa=$num; public function Getnumb() return $this-numb; public function Setnumb($num) $this-numb=$num; /* * 抽象方法GetResult 返回结果 * */ abstract protected function GetResult(); /* * 加法子类 * */class OperationAdd extends Abstract_Operation public function GetResult() $result = $this-Getnuma() + $this-Getnumb(); return $result; /* * 减法子类 * */class OperationSub extends Abstract_Operation public function GetResult() $result = $this-Getnuma() - $this-Getnumb(); return $result; /* * 抽象工厂角色类 * */abstract class abstract_factory abstract public static function GreateClass();/* * 加法工厂子类 * */class FactoryAdd extends abstract_factory public static function GreateClass() return new OperationAdd(); /* * 减法工厂子类 * */class FactorySub extends abstract_factory public static function GreateClass() return new OperationSub(); /* * 运算主函数 * * param int $firstnum * param int $secondnum * param int $operation */function Calculate($firstnum,$secondnum,$operation) /静态调用 switch ($operation) case 1: $oper = FactoryAdd:GreateClass(); break; case 2: $oper = FactorySub:GreateClass(); break; default: echo err!; die(); break; $oper-Setnuma($firstnum); $oper-Setnumb($secondnum); $oper-GetResult(); return $oper-GetResult(); $firstnum = 1;$secondnum = 1;$operation = 1;echo 计算结果:.Calculate($firstnum,$secondnum,$operation);PHP 设计模式六之代理设计模式 【超级变种:超级动态代理】一般动态代理产品 b 或者 产品c 需要满足代理的接口定义函数然后就可以动态引入产品 b 或者 产品c, 调用对应产品的方法超级动态代理:一切都是动态的,不受拘束 ?php/* * author Chen Wei Han * copyright Chen Wei Han 2011.06.01 * link * package demo * version $Id: strategy.php 1 2011-06-01 */class a public function a1() return a1; public function a2() return a2; class b public function b1() return b1; public function b2() return b2; class Proxy public function _construct($class) $this-_class=$class; public function _call($name,$arguments) eval($result=$this-_class-.$name.();); return $result; $a = new a;$b = new b;$proxy = new Proxy($b);echo $proxy-b1();echo $proxy-b2();$proxy = new Proxy($a);echo $proxy-a1();echo $proxy-a2();?PHP 设计模式七之原型设计模式arrs$key = $value; public function get($key) return $this-arrs$key; /* * 具体的原型对象 算法类 * */class Operation implements Prototype private $_operation; private $str; public function _construct($operation) $this-_operation = $operation; public function copy() return clone $this;/浅拷贝 public function GetResult($numa,$numb) $this-str = $numa.$this-_operation.$numb; eval($result = .$this-str.;); return $result; $OM = new OperationManager;$numa=1;$numb=2;$oper=加; $OM-set($oper,new Operation(+); $object1 = $OM-get($oper)-copy();echo $object1-GetResult($numa,$numb); $numa=5;$numb=2;$oper=减;$OM-set($oper,new Operation(-);$object2 = $OM-get($oper)-copy();echo $object2-GetResult($numa,$numb); /* 注意:我这里的计算器例子只是为了对应设计模式一的工厂模式计算器方便读者理解,不是很好的例子。 * 大家可以能注意到了,这里的具体的原型对象 算法类内部有不同的,就是加变减了,我这里巧妙使用eval来解决了,但如果业务逻辑太多 * 这就很麻烦,所以要使用原型模式一定的子类仅仅在初始化的参数对象类别上有所不同,内部处理必须一样的才适用。 * 等于就是工厂方法模式无限子类,而且子类内部处理基本一样的情况,原型模式最适合不过了,因为无限子类,工厂方法模式使用不合理了 */PHP 设计模式八之观察者设计模式?php/* * 订阅周刊 观察者设计模式【这采用PHP的SPL内置接口来实现,也可以自己定义接口】 * 定义:对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 * a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杭州市中石化2025秋招笔试模拟题含答案油田工程技术岗
- 2025年宿州市立医院招聘42人模拟试卷及一套参考答案详解
- 2025年应急管理部所属单位第二批次招聘185人模拟试卷参考答案详解
- 【借款协议】科技公司骨干住房补贴借款合同5篇
- 公司上市挂牌服务合同书7篇
- 2025年工业互联网平台IPv6升级与工业互联网边缘计算应用报告
- 2025年智能物流解决方案:交通运输与物流行业深度分析报告
- 2025年教育行业教育行业知识产权保护报告
- 2025年物流行业物流园区物流园区物流仓储管理优化研究报告
- 2025年在线艺术教育平台课程研发与创新报告
- 某光伏发电工程EPC总承包投标文件技术文件
- (正式版)JBT 2603-2024 电动悬挂起重机
- JJG(交通) 133-2023 落锤式弯沉仪
- 工厂主管人员值班表
- 消防安全周巡查记录表
- 俱舍论原文内容
- 第三章 护理伦理学基本原则规范和范畴
- 能源化学与能源化工概论-第一章 能源简介
- FZ/T 52058-2021低熔点聚乳酸(LMPLA)/聚乳酸(PLA)复合短纤维
- 2023年华中师范大学研究生入学考试试题汉语言文字专业语言及应用语言学对外汉语教学专业试题
- 高中生职业生涯规划主题班会课件
评论
0/150
提交评论