python实现工厂模式


Factory Method ( 3 . 3 ):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
Factory Method使一个类的实例化延迟到其子类。




1. 意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的
实例化延迟到其子类。
2. 别名
虚构造器( Virtual Constructor)
3. 动机
框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。
考虑这样一个应用框架,它可以向用户显示多个文档。在这个框架中,两个主要的抽象是
类Application和Document。这两个类都是抽象的,客户必须通过它们的子类来做与具体应用相
关的实现。例如,为创建一个绘图应用,我们定义类 DrawingApplication和DrawingDocument。
A p p l i c a t i o n类负责管理 D o c u m e n t并根据需要创建它们 — 例如,当用户从菜单中选择 O p e n或
New的时候。
因为被实例化的特定 D o c u m e n t子类是与特定应用相关的,所以 A p p l i c a t i o n类不可能预测
到哪个 D o c u m e n t子类将被实例化 — A p p l i c a t i o n类仅知道一个新的文档何时应被创建,而不
知道哪一种 D o c u m e n t将被创建。这就产生了一个尴尬的局面:框架必须实例化类,但是它只
知道不能被实例化的抽象类。
Factory Method模式提供了一个解决办案。它封装了哪一个 D o c u m e n t子类将被创建的信
息并将这些信息从该框架中分离出来,如下页上图所示。
A p p l i c a t i o n的子类重定义 A p p l i c a t i o n的抽象操作 C r e a t e D o c u m e n t以返回适当的 D o c u m e n t
子类对象。一旦一个 A p p l i c a t i o n子类实例化以后,它就可以实例化与应用相关的文档,而无

需知道这些文档的类。我们称 C r e a t e D o c u m e n t是一个工厂方法( f a c t o r y m e t h o d)
,因为它负
责“生产”一个对象。
4. 适用性
在下列情况下可以使用 Factory Method模式:
• 当一个类不知道它所必须创建的对象的类的时候。
• 当一个类希望由它的子类来指定它所创建的对象的时候。
• 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类
是代理者这一信息局部化的时候。
5. 结 构
6. 参与者
• Product(Document)
— 定义工厂方法所创建的对象的接口。
• ConcreteProduct(MyDocument)
— 实现Product接口。
• Creator(Application)
— 声明工厂方法,该方法返回一个 P r o d u c t类型的对象。 C r e a t o r也可以定义一个工厂方
法的缺省实现,它返回一个缺省的 ConcreteProduct对象。
— 可以调用工厂方法以创建一个 Product对象。
• ConcreteCreator(MyApplication)
— 重定义工厂方法以返回一个 ConcreteProduct实例。
7. 协作
• Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的 ConcreteProduct实例

class Factory:
	def createFruit(self,fruit):
		if fruit=="apple":
			return Apple()
		elif fruit=="banana":
				return Banana()
class Fruit:
	def __str__(self):
		return "fruit"
class  Apple(Fruit):
	def __str__(self):
		return "apple"
class Banana(Fruit):
	def __str__(self):
		return "banana"
if __name__=="__main__":
			factory=Factory()
			print factory.createFruit("apple")
			print factory.createFruit("banana")
			


倒数第三行创建了Factory类的实例factory

输出结果:

apple

Banana


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值