工厂三世同堂

来源:互联网 发布:黑色星期五 知乎 编辑:程序博客网 时间:2024/04/27 17:44

简单工厂:

当需要一个相同的接口,但里面完成内容不同时,就可以用一个工厂来产生其中的多个类的一个实例。 通俗说 

用来生产同一等级结构中的任意产品

优点:面向对象。包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

缺点:添加新的东西需要修改工厂类。


工厂方法:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
结构图:

根据依赖倒转原则,我们把工厂类的抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。
工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行,所以,加功能不需要改工厂类,而是修改客户端。

抽象工厂:


提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类
结构图:
优点:便于交换产品系列,实例化在一个应用中只需要初始化的的时候出现一次,它只需要改变工厂即可使用不同的产品配置。
它让具体的创建实力过程与客户端分离,客户端是通过他们的抽象接口操作实力,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

总结:学习是循序渐进的,这三个模式也是一样,简单工厂类似子,简单,最基础,工厂方法类似父,利用封装,修改的时候不会改基础类。抽象工厂就是祖辈,编程是门艺术,大批量的改动是非常丑陋的做法。抽象工厂更加有艺术性。

0 0