php常用的设计模式实践【2】

除了之前大话PHP设计模式【1】 所说的三种基础设计模式之外,还有其他一些设计模式。

④工厂方法模式

通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。

优点:核心类只关注工厂类的接口定义,而具体产品实例交给具体的工厂子类去创建。当新增产品时,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,扩展性好,符合面向对象编程的开闭原则。

工厂方法模式示例代码

⑤抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。

抽象工厂模式示例代码

⑥建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不知道内部的具体构建细节。

优点:

  • 对象的生产需要负责的初始化,比如一大堆类成员属性赋初始值,设置一下其他的系统环境变量。使用建造者模式可以将这些初始值工作封装起来
  • 对象的生成可根据初始值的顺序或数据不同,而生成不同角色

模式应用:

在很多游戏中,地图包括天空、地面、背景等组成部分,人物角色包括人体、服装、装备等组成部分,可以使用建造者模式对其进行设计,通过不同的具体建造者创建不同类型的地图或人物

建造者模式示例代码

⑦原型模式

与工厂模式类似,都是用来创建对象的,利用克隆来生成一个大对象,减少创建时的初始化等操作开销

优点:

  • 创建多个类似的大对象,节省了new的开销
  • 通过clone这个原型的对象来创建新的对象,免去初始化工作,系统仅需内存拷贝即可

模式应用:

多用于创建大对象,或初始化繁琐的对象。如游戏中的背景,地图。web中的画布等等

原型模式示例代码

【总结】

之前所讲的单例、简单工厂、工厂方法、抽象工厂、建造者、原型模式都是属于创建模式。目的是为了创建一个对象。

创建模式的优点在于如何把复杂的创建过程封装起来,如何降低系统的内销。

重要的思想在于封装,遵循单一原则,让类的功能单一,代码更简洁。