简单工厂、工厂方法模式和抽象工厂模式的分析

来源:互联网 发布:电影推荐算法数据集 编辑:程序博客网 时间:2024/04/27 09:36

(简单工厂模式在上次的博客中已经详细介绍了)

现在来详细介绍这三种模式的异同点: 

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

结构图:


简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。但是只是一个简单工厂,当我们需要增加一个新的功能的时候就需要修改工厂类的代码,这违背了开放——封闭原则。在这个基础上有了工厂方法模式。我们针对每一类都抽象出一个工厂,然后再实例化相应的产品,如果我们需要增加一个新的功能的时候只需要修改客户端的代码即可。

 

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

结构图:


抽象工厂比起工厂方法模式更复杂了一些,一个抽象工厂实例出两个具体的工厂然后由具体的工厂实例出不同的产品,每一类产品抽象出抽象产品类。客户端通过抽象接口联系产品类。它的好处就是便于交换产品系列,它使具体的创建过程与客户端分离,客户端只需通过抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离。

简单工厂模式:使用静态方法,通过接收的参数的不同来返回不同的对象的实例。但是不符合开发——封闭原则。

工厂方法:是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品的实例。可以增加产品,符合开发——封闭原则。

抽象工厂方法模式:包括“抽象工厂类”和“抽象产品类”,同时包含不只一个工厂类。所有的工厂类都必须是“抽象工厂类”的子类,所有的产品都不许是“抽象产品类”的子类。

0 0