您的位置:首页 > 编程语言 > Python开发

Python设计模式(三)--抽象工厂模式

2017-04-12 20:10 330 查看

抽象工厂

抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。

在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为
接口
来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。[1]

概念

抽象工厂模式的实质是“提供接口,创建一系列相关或独立的对象,而不指定这些对象的具体类。

UML图



实现

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#######################################################
#
#    文件名 :   abstruct_factory.py
#    作者   :   WangYi
#  电子邮箱 :   gzytemail@126.com
#    日期   :   2017/04/12 17:17:22
#
#    描述   :   抽象工厂模式
#

# Abstruct Product A
class APA(object):
def __init__(self):
pass

def create(self):
pass

# Abstruct Product B
class APB(object):
def __init__(self):
pass

def create(self):
pass

# Product A_1
class PA1(APA):
def __init__(self):
print("create PA1 instance")

def create(self):
print("making a Product A1")

# Product A_1
class PA2(APA):
def __init__(self):
print("create PA2 instance")

def create(self):
print("making a Product A2")

# Product B_1
class PB1(APB):
def __init__(self):
print("create PB1 instance")

def create(self):
print("making a Product B1")

# Product B_2
class PB2(APB):
def __init__(self):
print("create PB2 instance")

# Abstruct Factory Class
class AF(object):
def __init__(self):
pass

def make_product_a(self):
pass

def make_product_b(self):
pass

# Factory A
class FactoryA(AF):
def __init__(self):
pass

def make_product_a(self):
return PA1()

def make_product_b(self):
return PB1()

# Factory B
class FactoryB(AF):
def __init__(self):
pass

def make_product_a(self):
return PA2()

def make_product_b(self):
return PB2()

def product_process():
for cls in [FactoryA, FactoryB]:
f = cls()
# get Product A instance
a = f.make_product_a()
a.create()
# get Product B instance
b = f.make_product_b()
b.create()

if __name__ == "__main__":
product_process()


结果如下:

create PA1 instance
making a Product A1
create PB1 instance
making a Product B1
create PA2 instance
making a Product A2
create PB2 instance
making a Product B2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息