除了之前大话PHP设计模式【1】 所说的三种基础设计模式之外,还有其他一些设计模式。
④工厂方法模式
通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。
优点:核心类只关注工厂类的接口定义,而具体产品实例交给具体的工厂子类去创建。当新增产品时,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,扩展性好,符合面向对象编程的开闭原则。
⑤抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。
⑥建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不知道内部的具体构建细节。
优点:对象的生产需要负责的初始化,比如一大堆类成员属性赋初始值,设置一下其他的系统环境变量。使用建造者模式可以将这些初始值工作封装起来
对象的生成可根据初始值的顺序或数据不同,而生成不同角色
模式应用:
在很多游戏中,地图包括天空、地面、背景等组成部分,人物角色包括人体、服装、装备等组成部分,可以使用建造者模式对其进行设计,通过不同的具体建造者创建不同类型的地图或人物
⑦原型模式
与工厂模式类似,都是用来创建对象的,利用克隆来生成一个大对象,减少创建时的初始化等操作开销
优点:创建多个类似的大对象,节省了new的开销
通过clone这个原型的对象来创建新的对象,免去初始化工作,系统仅需内存拷贝即可
模式应用:
多用于创建大对象,或初始化繁琐的对象。如游戏中的背景,地图。web中的画布等等
【总结】
之前所讲的单例、简单工厂、工厂方法、抽象工厂、建造者、原型模式都是属于创建模式。目的是为了创建一个对象。
创建模式的优点在于如何把复杂的创建过程封装起来,如何降低系统的内销。
重要的思想在于封装,遵循单一原则,让类的功能单一,代码更简洁。