工厂和抽象工厂模式之间的基本区别是什么?
工厂和抽象工厂模式之间的基本区别是什么?
使用Factory模式,您可以生成特定界面的实现( Apple
, Banana
, Cherry
等) - 比如说IFruit
。
使用抽象工厂模式,您可以生成特定Factory接口的实现 - 例如IFruitFactory
。 每个人都知道如何创造不同种类的水果。
此信息的来源摘自:http://java.dzone.com/news/intro-design-patterns-abstract
抽象工厂与工厂方法
抽象工厂的方法实现为工厂方法。 抽象工厂模式和工厂方法模式都通过抽象类型和工厂将客户系统与实际实现类分离开来。 Factory Method通过继承来创建对象,其中抽象工厂通过组合创建对象。
抽象工厂模式由AbstractFactory,ConcreteFactory,AbstractProduct,ConcreteProduct和Client组成。
如何实施
抽象工厂模式可以使用工厂方法模式,原型模式或单例模式来实现。 ConcreteFactory对象可以作为Singleton实现,因为只需要ConcreteFactory对象的一个实例。
工厂方法模式是抽象工厂模式的简化版本。 工厂方法模式负责创建属于一个家族的产品,而抽象工厂模式负责处理多个产品系列。
工厂方法使用接口和抽象类将客户端从生成器类和生成的产品中分离出来。 抽象工厂有一个发生器,它是几种工厂方法的容器,以及将客户端与发生器和产品分离的接口。
何时使用工厂方法模式
如果需要将客户端与其使用的特定产品分离,请使用“工厂方法”模式。 使用工厂方法来减轻客户负责创建和配置产品实例的责任。
何时使用抽象工厂模式
客户端必须与产品类别分离时,使用抽象工厂模式。 特别适用于程序配置和修改。 抽象工厂模式也可以强制约束哪些类必须与其他类一起使用。 制造新的混凝土工厂可能需要很多工作。
例子:
抽象工厂示例1
这种磁盘在面食制作机中准备不同类型的面食的规格是抽象工厂,每个特定的磁盘是工厂。 所有工厂(面食制造商磁盘)都从抽象工厂继承它们的属性。 每个单独的磁盘包含如何创建面食的信息,而意大利面制造商则没有。
抽象工厂示例2:
冲压设备对应于抽象工厂,因为它是创建抽象产品对象的操作界面。 这些模具对应于混凝土厂,因为他们创造了一个混凝土产品。 每个零件类别(胡德,门等)都对应于抽象产品。 具体部件(即99 camry的驾驶员侧门)对应于混凝土产品。
工厂方法示例:
玩具公司对应于造物主,因为它可以使用工厂来创建产品对象。 制造特定类型的玩具(马或汽车)的玩具公司的部门对应于ConcreteCreator。
工厂模式:工厂生产IProduct实现
抽象工厂模式:工厂生产IFactories,反过来生产IProducts :)
[根据意见更新]
至少根据维基百科的说法,我之前写的是不正确的。 抽象工厂只是一个工厂界面。 有了它,您可以在运行时切换工厂,以允许不同上下文中的不同工厂。 对于不同的操作系统,SQL提供者,中间件驱动程序等,例子可能是不同的工厂。
上一篇: What is the basic difference between the Factory and Abstract Factory Patterns?