201204-28 php中责任链模式 NEW 概念又叫职责链模式。包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法。示例情景一: 当用户发布一个帖子时: 如果版主可以决定,就版主处理; &nb... Read More >
201204-27 php中spl库观察者模式接口 NEW PHP-SPL标准库中实现了观察者模式接口,PHP内置提供了两个接口来供外部应用区实现这个模式。<文档>http://www.php.net/manual/zh/splobserver.update.php SplSubject 接口SplSubject代表着被观察的对象,其结构: interface SplSubject{ //添加(注册)一个观察者 &n... Read More >
201204-26 php中策略模式详解 NEW 概念在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。场景场景1:假设现在要设计一个购物车系统,一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这个复杂。例如:对普通会员无折扣,对中级会员提供8折优惠,对高级会员提供7折优惠。场景2:例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不同的广告示例/** ... Read More >
201204-25 php中的代理模式 概念代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。场景 1. 最常... Read More >
201204-24 php中的迭代器模式 概念迭代器:类继承PHP的Iterator接口,批量操作。1. 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。2. 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。示例接口Iteratorcurrent() 返回当前元素key() 返回当前元素的键next() 向前移动到下一个元素rewind() 返回到迭代器的第一个元素valid() 验证是否有效class AllUser implements \Iterat... Read More >
201204-22 策略模式与桥接模式区别 实际上所有模式可以只分为类模式和对象模式两种,类模式是用继承而对象模式是用委托。Bridge模式和Strategy模式相似就是因为他们都将任务委托给了另外一个接口的具体实现,他们之间的区别在于Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性而Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。因此可以想象一般情况下Bridge的实现几乎不会在运行时更改而Strategy的算法则很有可能需要在运行时更换,这就导致在细节方面需要考虑的因素可能... Read More >
201204-21 php中的桥接模式 概念桥接模式 (Bridge Pattern):将抽象与实现解耦,使得两者可以独立的变化1,如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。2,抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。3,虽然在系统中使用继承是没有问题的,但是由于抽象... Read More >
201204-20 适配器模式与装饰器模式的区别 概念适配器与装饰器模式的别名都是包装模式(Wrapper)。区别适配器模式的意义将一个接口转变成另一个接口,目的是通过改变接口来达到重复使用的目的。装饰器模式的意义不改变被装饰对象的接口,而是保持原有的接口,增强原有对象的功能,或改变原有对象的处理方式而增提高性能。... Read More >
201204-19 php中的适配器模式 概念适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。场景老代码接口不适应新的接口需求,或者代码很多很乱不便于继续修改,或者使用第三方类库。例如:php连接数据库的方法:mysql,,mysqli,pdo,可以用适配器统一示例/* * 在我们的示例中,目标接口是MonkeyInterfa... Read More >
201204-18 php中装饰器模式 概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功... Read More >
201204-17 php中的门面模式Facade 概念门面模式又叫外观模式,用来隐藏系统的复杂性,提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。构成1.定义一个(或多个)具备所需接口的新类(门面类Facade)2.新类门户(门面类Facade)使用原来的系统(包含Hotel,Traffic,ScenicArea三个类)3.客户使用门面类对象与原系统打交道(客户端只调用Fa... Read More >
201204-16 php中的组合模式 概念当我们的一个对象可能代表一个单一的实体,或者一个组合的实体,但是仍然需要通过同样的方式被使用时,这种情形则适合使用组合模式的设计。示例一个表单类实例在处理其表单所有元素的方法与处理该表单自身实例方法相同,在调用方法 render() 时,会随之遍历它的所有子元素并对他们调用 render() 方法<?php interface RenderableInterface { &nb... Read More >
201204-15 php中享元模式 概念享元模式(Flyweight),为了节约内存的使用,享元模式会尽量使类似的对象共享内存。在大量类似对象被使用的情况中这是十分必要的。常用做法是在外部数据结构中保存类似对象的状态,并在需要时将他们传递给享元对象示例<?php /** * 创建享元接口 FlyweightInterface 。 */ interface FlyweightInterface { &... Read More >
201204-14 对象池模式和注册树模式的区别和联系 区别对象池主在对象创建开销较大或要控制对象数量的时候使用。最常见的对象池应该是数据库连接池和线程池,例如程序需要数据库连接时从连接池中取一个(连接池里有多个连接),用完了不是关闭连接而是把连接放回连接池给其他程序使用。一个对象池通常只放同一类的对象。注册树(Registry模式)其实类似对象池,但是里面各种类型的对象都放一个,方便程序通过Registry找到这些对象直接使用而不需自己创建。联系两者有交集,但是关注点是不同的。用对象池,关注的是性能,用Registry,关注的是... Read More >
201204-13 php中的注册树模式 概念 注册树模式当然也叫注册模式,注册器模式。之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更容易让人理解。注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法。 为什么要采用注册树模式 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。 首先,单例模式创建... Read More >
201204-12 php中的对象池模式 概念对象池设计模式 是创建型设计模式,它会对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态 - 一个存放对象的 “池子” - 而不是对对象进行一次性的的使用(创建并使用,完成之后立即销毁)。对象池的使用者会对对象池发起请求,以期望获取一个对象,并使用获取到的对象进行一系列操作,当使用者对对象的使用完成之后,使用者会将由对象池的对象创建工厂创建的对象返回给对象池,而不是用完之后销毁获取到的对象。对象池在某些情况下会带来重要的性能提升,比如耗费资源的对象... Read More >
201204-11 php中原型模式 概念原型模式(Prototype Pattern):与工厂模式类似,都是用来创建对象的。利用克隆来生成一个大对象,减少创建时的初始化等操作占用开销场景多用于创建大对象,或初始化繁琐的对象。如游戏中的背景,地图。web中的画布等等1,有些时候,我们需要创建多个类似的大对象。如果直接通过new对象,开销很大,而且new完还得进行重复的初始化工作。可能把初始化工作封装起来的,但是对于系统来说,你封不封装,初始化工作还是要执行。,2,原型模式则不同,原型模式是先创建好一个原型对象,然... Read More >
201204-10 php中的建造型模式 概念也叫生成器模式,建造型模式用于创建过程稳定,但配置多变的对象。在《设计模式》一书中的定义是:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用来通过链式调用生成不同的配置。使用场景1. 需要生成的产品对象有复杂的内部结构。2. 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。3. 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。优势1. 建造者模式的使用使得产品的内部表象可以独立的变化... Read More >
201204-09 单例模式(Singleton)和 多例模式(Multiton) 1、概念简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。 常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。2、示例Singleton.php<?php /** * Singleton类 */ class Singleton { p... Read More >
201204-08 PHP简单工厂、工厂方法和抽象工厂对比 1、 概念工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。根据抽象程度不同分为:简单工厂模式、工厂方法模式和抽象工厂模式2、示例,简单工厂模式(静态工厂方法模式):<?php /** *简单工厂模式与工厂方法模式比较。 *简单工厂又叫静态工厂方法模式,简单工厂模式是通过一个静态方法创建对象的。 */ interfac... Read More >