设计模式-PHP实现
三石先生XL
这个作者很懒,什么都没留下…
展开
-
大话设计模式-总结(4)-行为型模式二组
18.解释器模式:定义一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。【DP】如果一种特定类型的问题发生的频率足够高,那么就可以考虑将该问题的各个实例表述为一个简单语言中的句子。也就是说,通过构建一个解释器,该解释器解释这些句子来解决该问题【DP】。19.中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用转载 2012-07-30 17:03:20 · 1028 阅读 · 0 评论 -
大话设计模式-迭代器模式
//Iterator迭代器抽象类abstract class Iterators { //用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口 public abstract function first(); public abstract function next(); public abstract function isDone(); publi原创 2012-07-23 14:52:52 · 1420 阅读 · 1 评论 -
大话设计模式-组合模式
abstract class Component { protected $name; function __construct($name) { $this->name = $name; } public abstract function add(Component $c); public abstract function remove(Component $c); pu原创 2012-07-20 16:34:21 · 547 阅读 · 0 评论 -
大话设计模式-备忘录模式
//发起人类class Originator { public function __get($key) { return isset($this->$key) ? $this->$key : null; } public function __set($key, $value) { $this->$key = $value; } //需要保存的属性,可能有多个 pri原创 2012-07-19 17:17:14 · 448 阅读 · 0 评论 -
大话设计模式-抽象工厂模式-简单工厂模式结合
//User表class User { private $id; private $name; public function __set($key, $value) { $this->$key = $value; } public function __get($key) { if(isset($this->$key)) { return $this->$key;原创 2012-07-19 09:33:59 · 498 阅读 · 0 评论 -
大话设计模式-状态模式
abstract class State { public abstract function writeProgram($w);}//上午工作状态class ForenoonState extends State { public function writeProgram($w) { if($w->hour < 12) { echo '当前时间:'.$w->hour.'原创 2012-07-19 09:32:19 · 1011 阅读 · 0 评论 -
大话设计模式-适配器模式
class Target { public function request() { echo '普通请求!'; }}//需要的适配器class Adaptee { public function SpecificRequest() { echo '特殊请求!'; }}//通过在内部包装一个Adaptee对象,把源接口转换成目标接口class Adapter exten原创 2012-07-19 13:39:50 · 461 阅读 · 0 评论 -
大话设计模式-抽象工厂模式
//抽象工厂模式class LeiFeng { public function sweep() { echo '扫地'; } public function wash() { echo '洗衣'; } public function buyRice() { echo '买米'; }}class Undergraduate extends LeiFeng {}原创 2012-07-19 09:35:54 · 603 阅读 · 0 评论 -
大话设计模式-策略模式
//Strategy类,定义所有支持的算法的公共接口abstract class CashSuper { //算法方法 abstract function acceptCash($money);}//ConcreteStrategy,封装了具体的算法或行为,继承于Strategy//正常收费子类class CashNormal extends CashSuper { publi原创 2012-07-19 09:28:14 · 649 阅读 · 0 评论 -
大话设计模式-装饰者模式
abstract class Component { public abstract function operation();}class ConcreteComponent extends Component { public function operation() { echo '具体对象的操作'; }}abstract class Decorator extends原创 2012-07-19 09:29:51 · 511 阅读 · 0 评论 -
大话设计模式-工厂模式
class Operation { public static function getResult($numberA, $numberB, $operate) { $result = 0; switch($operate) { case '+': $result = $numberA + $numberB; break; case '-': $re原创 2012-07-19 09:26:27 · 496 阅读 · 0 评论 -
大话设计模式-桥接模式
abstract class Implementor { public abstract function operation();}class ConcreteImplementorA extends Implementor { public function operation() { echo '具体实现A的方法执行'; }}class ConcreteImplemen原创 2012-07-24 10:58:04 · 2527 阅读 · 0 评论 -
大话设计模式-单例模式
class Singleton { private static $instance; //构造方法让其私有,就堵死了外界利用new创建此类实例的可能 private function __construct() { } //此方法是获得本类实例的唯一全局访问点 public static function getInstance() { //若实例不存在,则new一个新实例,原创 2012-07-23 15:17:34 · 500 阅读 · 0 评论 -
大话设计模式-总结(3)-行为型模式
13.观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。14.模版方法模式:定义一个操作的算法骨架,而将一些步骤延迟到子类中,模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤【DP】代码重复是编程中最常见、最糟糕的‘坏味道’,如果我们再一个以上的地方看到相同的程序结构,那么可以肯定,设法将他们合转载 2012-07-30 15:27:07 · 468 阅读 · 0 评论 -
大话设计模式-总结(2)-结构型设计模式
6.适配器:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【DP】使用一个已经存在的类,而它的接口不符合要求,或者希望创建一个可以复用的类,该类可以与其他不想关的类或不可预见的类协同工作。让这些接口不同的类通过适配后,协同工作。【DP】主要是为了解决两个已有接口之间不匹配的问题,我不需要考虑这些接口是怎样实现的,也不考虑他们转载 2012-07-27 17:29:37 · 452 阅读 · 0 评论 -
大话设计模式-总结(1)-创建型设计模式
创建型模式:1.抽象工厂:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。【DP】创建模式隐藏了这些类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建型模式在创建了什么、谁创建它,它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性【DP】。2.建造者:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以转载 2012-07-27 16:47:56 · 660 阅读 · 1 评论 -
大话设计模式-访问者模式
引自原书1.访问者模式适用于数据结构相对稳定的系统2.它把数据结构和作用于结构之上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化3.访问者模式的目的是要把处理从数据结构分离出来4.有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。5.访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一原创 2012-07-26 17:04:23 · 622 阅读 · 0 评论 -
大话设计模式-解释器模式
//声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。abstract class AbstractExpression { public abstract function interpret(Context $context);}//(终结符表达式)实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpret()方法。方法中每一个终结原创 2012-07-26 11:04:38 · 428 阅读 · 0 评论 -
大话设计模式-享元模式
享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度地减少单个实例的数目。//所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态原创 2012-07-25 16:24:49 · 2092 阅读 · 0 评论 -
大话设计模式-中介者模式
引自原书1.中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。2.Mediator的出现减少了各个Colleague的耦合,使得可以读一地改变和服用各个Colleague类和Mediator。3.由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注原创 2012-07-25 11:23:43 · 591 阅读 · 0 评论 -
大话设计模式-命令模式
引自原书:1.较容易地设计一个命令队列2.在需要的情况下,可以容易地将命令记入日志3.允许接收请求的一方决定是否要否决请求4.可以容易地实现对请求的撤销和重做5.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易6.命令模式把请求一个操作对象与知道怎么执行一个操作对象分割开【DP】敏捷开发原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。原创 2012-07-24 15:45:42 · 722 阅读 · 0 评论 -
大话设计模式-职责链模式
1.当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它【DP】2.接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接受者的引用【DP】。3.随时随地增加或修改处理一个请求的结构。增强了给对象指派职责的灵活性【DP】。4.一个请求极有原创 2012-07-24 17:09:42 · 475 阅读 · 0 评论 -
大话设计模式-观察者模式
//通知者接口interface Subject { function attach($observer); function detach($observer); function notify();}//老板class Boss implements Subject { //同事列表 private $observers = array(); private $actio原创 2012-07-19 09:31:26 · 394 阅读 · 0 评论 -
备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式
百度词条的解释http://baike.baidu.com/view/3591132.htm<?php//发起人类Originatorclass Originator { private $state; public function __set($key, $value) { $this->$key = $value; } public function __g原创 2012-06-14 10:35:22 · 769 阅读 · 0 评论 -
策略模式(Strategy Pattern)
百度词条的解释http://baike.baidu.com/view/2141079.htm<?php//策略模式//抽象鸭子类abstract class Duck { private $duckName; private $flyBehavior; private $quackBehavior; public function __set($key, $value)原创 2012-06-14 10:36:43 · 300 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
百度词条的解释http://baike.baidu.com/view/6143765.htm<?php//享元模式//抽象享元角色(Flyweight)abstract class Character { private $symbol; private $width; private $height; private $ascent; private $descen原创 2012-06-14 10:49:55 · 849 阅读 · 0 评论 -
访问者模式(Visitor Pattern)----等待补全
百度词条的解释http://baike.baidu.com/view/3599899.htm原创 2012-06-14 10:41:15 · 303 阅读 · 0 评论 -
状态模式(State Pattern)
百度词条的解释http://baike.baidu.com/view/3589977.htm<?php//状态模式//心情abstract class MoodState { abstract function doSomething(); public function changeState($mood) { $this->person->setState(new $mood原创 2012-06-15 08:47:32 · 396 阅读 · 0 评论 -
模版方法模式(Template Method Pattern)
模板方法模式可以所是最为常见的一种设计模式了,出乎很多人意料的是,很多人已经在他们的代码中用到了模板方法模式而没有意识到自己用到了这个模式,模板方法模式几乎可以在所有的抽象基类中找到。 通过模板方法模式我们可以定义一个操作的骨架,而将该操作中的各个步骤的具体实现延迟至派生类中。代表这些具体实现的方法同常称作基本方法(Primitive Method),而调用这些基本方法的方法叫做模板方法(Temp原创 2012-06-25 14:16:42 · 462 阅读 · 0 评论 -
装饰者/装饰模式(Decorator/Wrapper Pattern)---待补全
百度词条的解释http://baike.baidu.com/view/2787758.htm原创 2012-06-25 14:18:42 · 417 阅读 · 0 评论 -
中介者模式/调停者模式(Mediator Pattern)
百度词条的解释http://baike.baidu.com/view/3905086.htm<?php//中介者模式(调停者模式)abstract class AbstractColleague { protected $number; public function getNumber() { return $this->number; } public funct原创 2012-06-25 14:50:16 · 379 阅读 · 0 评论 -
命令模式(Command Pattern)--等待补全
百度词条的解释http://baike.baidu.com/view/1963264.htm原创 2012-06-25 14:58:11 · 275 阅读 · 0 评论 -
解释器模式(Interpreter Pattern)--等待补全
解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。原创 2012-06-25 14:59:25 · 359 阅读 · 0 评论 -
代理模式(Proxy Pattern)
<?php//代理模式//基础类(get/set方法)class CommonClass { public function __set($key, $value) { $this->$key = $value; } public function __get($key) { if(isset($this->$key)) { return $this->$key; }原创 2012-06-14 10:39:05 · 360 阅读 · 0 评论 -
原型模式(Prototype Pattern)
百度词条的解释http://baike.baidu.com/view/1781744.htm<?php//原型模式//抽象要是原型abstract class Key { private $name; private $owner; public function __construct($name, $owner) { $this->name = $name;原创 2012-06-14 10:50:20 · 424 阅读 · 0 评论 -
外观模式/ 门面模式(Facade Pattern)
百度词条的解释http://baike.baidu.com/view/2739662.htm<?php//正面模式(外观模式)//外观类(厨师)class Cook { private $foods = array(); //烹饪 public function cooking(Customer $customer) { $menuList = $customer->g原创 2012-06-14 10:51:27 · 432 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory)
百度词条的解释http://baike.baidu.com/view/1580269.htm<?php//抽象工厂模式class ShiWuHongShaoRou { function __construct() { echo '我是红烧肉'; }}class ShiWuZhuZhou { function __construct() { echo '我是猪肘'原创 2012-06-14 10:38:19 · 393 阅读 · 0 评论 -
单例/单态模式(Singleton Pattern)
百度词条的解释http://baike.baidu.com/view/1859857.htm<?php//单例模式final class PSV { private $loan = false; private static $myPSV; public function getInstance() { if(!isset(self::$myPSV)) { self原创 2012-06-14 10:39:41 · 351 阅读 · 0 评论 -
迭代器模式(Iterator Pattern) 又叫做游标模式(Cursor Pattern)
百度词条的解释http://baike.baidu.com/view/1413849.htm<?php//迭代器模式//抽象聚集interface IList { function getIterator();}//抽象迭代器interface IIterator { function moveNext(); function currentItem();原创 2012-06-14 10:42:08 · 915 阅读 · 0 评论 -
工厂方法模式(Factory Method Pattern)
百度词条的解释http://baike.baidu.com/view/1580263.htm<?php//工厂方法模式//各个实际工厂需要继承的接口class apple { public function eat() { echo '苹果被吃了'; }}class applefarm implements abstractfarm { public functio原创 2012-06-14 10:43:26 · 471 阅读 · 0 评论