设计模式
文章平均质量分 57
落叶成冰
一个人如果没有梦想,那和咸鱼有什么分别!
展开
-
模板方法模式
模板方法模式:模板方法模式定义了一个算法的步骤, 并允许子类为一个或多个步骤提供实现。模板方法模式:在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中, 模板方法使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。<?php// 模板方法模式function echoLine($msg) { echo $msg, '';}abstract class原创 2017-02-18 21:54:10 · 249 阅读 · 0 评论 -
命令模式的简单实现
<?php// 命令模式interface Command{ public function execute();}/** * concrete command, 具体的命令 */class ConcreteCommand implements Command{ private $receiver; public function __construct(Receiv原创 2017-02-22 00:40:06 · 232 阅读 · 0 评论 -
适配器模式之类适配
<?php// 适配器模式-类适配/** * 需要被适配的类 * 需求:给 Source 新增一个新的方法但又不修改 Source 的源代码 */class Source{ public function action() { echo 'call action', ''; }}interface Targetable{ /** * Source 类中同名的方原创 2017-02-22 11:43:43 · 234 阅读 · 0 评论 -
适配器模式之对象适配
<?php// 适配器模式-对象适配/** * 需要被适配的类 * 需求:给 Source 新增一个新的方法但又不修改 Source 的源代码 */class Source{ public function action() { echo 'call action', ''; }}interface Targetable{ /** * Source 类中同名的原创 2017-02-22 11:51:03 · 320 阅读 · 0 评论 -
适配器模式之接口适配
<?php// 适配器模式-接口适配/** * 问题:实现此接口的类需要实现所有的方法,但是实际使用的仅仅是其中的某一个方法而已,比较繁琐 * 解决方法:增加一个中间类,对所有的方法空实现,然后不再直接实现接口而是继承这个中间类 * 这就是 接口适配. */interface Sourceable{ function action1(); function action2()原创 2017-02-22 12:01:18 · 308 阅读 · 0 评论 -
组合模式实现方式一
<?php// 组合模式function echoLine($msg) { echo $smg, '';}interface Component{ public function doAction();}/** * 局部类 */class Leaf implements Component{ public function doAction() { echo原创 2017-02-22 15:49:02 · 348 阅读 · 0 评论 -
组合模式实现方式二
<?php// 组合模式interface Component{ public function doAction(); public function addComponent(Component $c); public function removeComponent(Component $c);}abstract class AbstractComponent{ //原创 2017-02-22 15:55:56 · 389 阅读 · 0 评论 -
访问者模式
<?php// 访问者模式interface Visitor{ public function visit(Subject $subject);}interface Subject{ public function accept(Visitor $visitor); public function operation();}class ConcreteVisitor im原创 2017-02-23 00:53:58 · 168 阅读 · 0 评论 -
设计模式中的六大原则
单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。里氏替换原则定义1:如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象o2,使得以 T1 定义的所有程序 P 在所有的对象 o1都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。定义2:所有引用基类的地方必须能透明地使用其子原创 2017-02-23 18:47:41 · 310 阅读 · 0 评论 -
解释器模式的一个简单示例
<?php// 解释器模式abstract class Expression{ private static $keyCount = 0; private $key = NULL; abstract function interpret(InterpreterContext $ctx); /** * as array key * @return auto increme原创 2017-02-24 12:34:52 · 672 阅读 · 0 评论 -
PHP对观察者模式的原生支持
<?php// 观察者模式// PHP(SPL)原生支持/*类摘要SplSubject { abstract public void attach ( SplObserver $observer ); abstract public void detach ( SplObserver $observer ); abstract public void notify ( void )原创 2017-02-21 15:34:32 · 244 阅读 · 0 评论 -
观察者模式
<?php// 观察者模式/** * abstract subject */interface Subject{ /** * add Observer */ public function attach(Observer $obs); /** * remove Observer */ public function detach(Observer $obs原创 2017-02-21 15:26:52 · 277 阅读 · 0 评论 -
原型模式
<?php// 原型模式class Obj{ private $name = 'obj';}class Prototype{ private $type = 'prototype'; private $obj = null; public function __construct($type = null) { $this->type = $type; $th原创 2017-02-18 23:55:12 · 157 阅读 · 0 评论 -
代理模式
<?php// 代理模式function echoLine($msg) { echo $msg, '';}interface Sourceable{ function method();}// 被代理对象class Source implements Sourceable{ public function method() { echoLine('call met原创 2017-02-20 11:35:01 · 163 阅读 · 0 评论 -
策略模式
<?php// 策略模式interface Calculator{ public function calc($a, $b);}/** * add strategy */class AddCalculator implements Calculator{ public function calc($a, $b) { return intval($a) + intva原创 2017-02-20 11:43:02 · 174 阅读 · 0 评论 -
装饰模式
<?php// 装饰模式function echoLine($msg) { echo $msg, ''; }class RequestHelper{ /** * return class resource id */ public function __toString() { ob_start(); var_dump($this); $str原创 2017-02-20 11:54:54 · 149 阅读 · 0 评论 -
工厂模式的三种形式
<?php// 简单工厂模式interface ICar { function run();}class BMWCar implements ICar { public function run() { echo 'bmw run!'; }}class AuDiCar implements ICar { public function run() { ech原创 2017-02-20 20:11:55 · 288 阅读 · 0 评论 -
建造者模式
<?php// 建造者模式class Product{ private $size; private $color; private $type; public function setSize($size) { $this->size = $size; } public function setColor($color) { $this->color = $col原创 2017-02-20 22:02:22 · 163 阅读 · 0 评论 -
外观模式
<?php// 外观模式function echoLine($msg) { echo $msg, '';}/** * 外观模式是一个十分简单的概念,它只是为一个分层或一个子系统创建一个单一的入口。这会带来很多好处。 * 首先,有助于分离项目中不同的部分。其次,对于客户端开发者来说,访问代码变得简洁,非常方便。另外, * 由于只在一个地方调用子系统,减少了出错的可能性,并因此可以原创 2017-02-20 22:13:38 · 175 阅读 · 0 评论 -
单例模式
<?php// 单例模式class Singleton{ protected static $ins = null; /** * 禁止子类重载 __construct() 构造方法 */ private final function __construct() { // 禁止 new } /** * 禁止子类重载 __clone() 方法 */ prot原创 2017-02-21 10:14:49 · 259 阅读 · 0 评论 -
单例模式之继承碰见的问题
<?php// 单例模式之继承class Singleton{ protected static $ins = null; private final function __construct() { } protected final function __clone() { } // public static function getIns() { // if(se原创 2017-02-21 10:49:59 · 2182 阅读 · 0 评论 -
状态模式
<?php// 状态模式class State{ // 有效状态常量值 const st_dev = 0; const st_deploy = 1; const st_debug = 2; private $st = -1; //初始状态-1 public function __construct($st=null) { if(!is_null($st)) { $原创 2017-02-24 12:57:48 · 239 阅读 · 0 评论