设计模式 之 创建型模式

来源:互联网 发布:李华明编程厉害不 编辑:程序博客网 时间:2024/04/27 02:59

       创建型模式是针对对象实例化问题设计的,通过各种模式可以解决不同类型的实例化问题。


       分别类看各个模式的具体结构图是怎么样的。

建造

When: 实现的对象构造方法顺序是稳定的、一样的,只是在表现的形式上有所不同。
就如在工厂中生产娃娃,每个娃娃都有有头、身体、四肢、衣服,这些过程是确定的,可以抽象出来为父类,但是可能不同的娃娃穿的衣服不同,胖瘦不同,这就需要具体的子类来实现,而在创建的过程中为了避免产出的娃娃是缺胳膊少腿的,就要有就要检查,它相当于指挥者,定义一个方法包含所有的生产娃娃各部件的方法。在生产时告诉指挥者要生产什么样的娃娃即可。

原型方法
When:当需要大量的实现同样的实例时。执行具体的实例化一次,其他的可以通过原型克隆。
就像人在手写简历然后复印一样,一个空的表是一个原型,当人去填写的时候就是实例化原型(不同的人写就是实例化不同的原型对象),当实例化完成之后去复印的过程就是拷贝原型创建新对象的过程。

单例模式
When:要求只能有一个实例的是时候。

简单工厂
How:工厂中定义一个静态的方法,根据switch语句决定实例化的对象。
Use:根据客户端在使用简单工厂时参数来决定实例化那个子类。

工厂方法
What:定义一个创建对象的接口,让其子类决定实例化哪一个类。

抽象工厂
What:提供一个创建一系列的相关或相互依赖的对象接口,不需制定具体的类。
When:用于多个产品系列的问题。(每个系列中包含的产品是一样的)

简单工厂VS工厂方法
简单工厂:其中包含逻辑判断,根据客户端选择的条件决定实例化相关的类,但是如果要修改如增加或减少类则需要修改工厂,违背了“开放封闭”原则,为了改进则有了工厂方法模式。
工厂方法:相对简单工厂更加符合“开放封闭原则”,要新增加或减少类时,不必修改工厂,只需要增加对应新类的工厂子类即可。

工厂方法VS抽象工厂
抽象工厂是方法工厂的升级版,
工厂方法:每个工厂子类实现一个产品子类
抽象工厂:每个工厂子类实现一个系列的多个产品子类。
如书上的例子:
两个数据库系列:SQL系列和Access系列
多个产品(表):User、Department。
存在一个工厂只实现SQL系列的User和Department,存在另一个工厂直实现Access的User和Department。

0 0