PHP设计模式

设计模式总的分为三种,创建型模式、结构性模式、行为型模式

1、创建型模式

创建型模式为根据实际情况来创建对象,创建的模式又分为对象创建模式和类创建模式,对象创建模式会把对象创建的一部分在另一个对象中实现,类创建模式则将它对象的创建在子类中实现。

2、结构性模式

结构性模式为处理模块之间的耦合关系

3、行为型模式

行为型模式

创建型 (Creational)

1、简单工厂(Simple Factory):不同于静态工厂是因为不使用static方法

2、工厂方法(Simple Factory):一个class创建一个你想要使用的对象 [code] http://www.phptherightway.com/pages/Design-Patterns.html

3、抽象工厂(Abstract Factor):不使用特定的类来创建相关或是不相关的对象,创建的类都继承相同的接口,抽象工厂不关心对象是如何创建的,he just knows how they go together

4、生成器 (Builder):一个接口,用来创建复杂对象的部分

5、原型 (Prototype):通过创建一个原型对象,然后复制原型(clone)对象来避免通过标准的方式创建大量的对象产生的开销

6、单例 (Singleton):当设计一个web应用的时候,保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接 [code]http://www.phptherightway.com/pages/Design-Patterns.html

7、静态工厂(Static Factory):和简单工厂很像,只是使用了静态对象

8、对象池 (pool):对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态

9、多例 (Multition):使类仅有一个命名的对象的集合可供使用,像单例模式但是有多个实例。比如2 个数据库连接,比如,一个连接MySQL,另一个连接SQLite

结构型 (Structural)

1、适配器 (Adapter):将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口

2、桥接模式 (Bridge):将抽象部分与它的实现部分分离,使它们都可以独立的变化

3、合成模式 (Composite):将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

4、装饰器模式(Decorater):不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法

5、外观模式 (Facade):是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。

6、享元模式 (Flyweight):把经常要使用到的对象共享起来,而不去从新创建而占用内存。 http://lobert.iteye.com/blog/2066311

7、代理模式 (Proxy):为昂贵或者无法复制的资源提供接口

8、注册模式 (Registry):为应用中常用的对象实现一个中央存储,通常用一个只有静态方法的抽象类来实现(或者使用单例模式)

行为型(Behavioral)

1、责任链模式 (Chain of Responsibilities):使多个对象都有机会处理请求,从而避免请求的发送者和接受者耦合的关系。将这个对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

2、命令模式 (Command):命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

3、解释器模式 (Interpreter):用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作

4、迭代器模式 (Iterator):提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承Iterator类

5、中介者模式 (Mediator):用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

6、备忘录模式 (Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在以后把该对象的状态恢复到之前保存的状态。

7、观察者模式 (Observer):定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。如微博关注博主,博主更新,关注者都能得到通知

8、状态模式 (State):状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样

9、策略模式 (Strategy):针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作 [code]http://www.phptherightway.com/pages/Design-Patterns.html

10、模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以在不改变一个算法的结构的情况下重定义该算法的某些特定的步骤

11、访客模式 (Visitor): 访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。