Python设计模式(1)设计模式简介与分类
Python设计模式(2)简单工厂模式
Python设计模式(3)工厂方法模式
Python设计模式(4)抽象工厂模式
Python设计模式(5)建造者模式
Python设计模式(6)单例模式
1、抽象工厂模式简介
-
含义:
定义一个工厂类接口,让工厂子类创建一系列相关或相互依赖的对象 -
说明:相对工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品
-
优点:
将客户端与类的具体实现向分离,每个工厂创建了一个完整的产品系列,使得3易于交换产品系列 -
缺点:难以支持新种类(抽象)的产品
2、代码实现
代码实现如下,学校员工有学生、老师,和工人,每个角色又都有卡,服装,鞋子,每个角色的都不一样,因此,这里就使用了抽象工厂模式,学生,老师和工人分别通过抽象类控制约束,即学生的卡片不能生产出老师的卡片,工人的鞋子也不能使用学生的鞋子,阅读下面的代码就会发现,在这种非常复杂的关系场景下,使用抽象工厂还是很方便的控制好约束关系,但是缺点也是显而易见的,类特别多
from abc import ABCMeta,abstractmethod
class Card(metaclass=ABCMeta):
@abstractmethod
def show_card(self):
pass
class Clothes(metaclass=ABCMeta):
@abstractmethod
def show_clothes(self):
pass
class Shoes(metaclass=ABCMeta):
@abstractmethod
def show_shoes(self):
pass
class Person(metaclass=ABCMeta):
@abstractmethod
def make_card(self):
pass
@abstractmethod
def make_clothes(self):
pass
@abstractmethod
def make_shoes(self):
pass
class StudentCard(Card):
def show_card(self):
print("学生卡")
class TeacherCard(Card):
def show_card(self):
print("教师卡")
class WorkerCard(Card):
def show_card(self):
print("工人卡")
class StudentClothes(Clothes):
def show_clothes(self):
print("学生服装")
class TeacherClothes(Clothes):
def show_clothes(self):
print("教师服装")
class WorkerClothes(Clothes):
def show_clothes(self):
print("工人服装")
class StudentShoes(Shoes):
def show_shoes(self):
print("学生鞋子")
class TeacherShoes(Shoes):
def show_shoes(self):
print("教师鞋子")
class WorkerShoes(Shoes):
def show_shoes(self):
print("工人鞋子")
class TeacherFactory(Person):
def make_card(self):
return TeacherCard()
def make_clothes(self):
return TeacherClothes()
def make_shoes(self):
return TeacherShoes()
class StudentFactory(Person):
def make_card(self):
return StudentCard()
def make_clothes(self):
return StudentClothes()
def make_shoes(self):
return StudentShoes()
class WorkerFactory(Person):
def make_card(self):
return WorkerCard()
def make_clothes(self):
return WorkerClothes()
def make_shoes(self):
return WorkerShoes()
class Member(object):
def __init__(self,card,clothes,shoes):
self.card=card
self.clothes=clothes
self.shoes=shoes
def show_info(self):
print("学校成员信息:")
self.card.show_card()
self.clothes.show_clothes()
self.shoes.show_shoes()
def make_member(factory):
card=factory.make_card()
clothes=factory.make_clothes()
shoes=factory.make_shoes()
return Member(card,clothes,shoes)
执行结果如下:
学校成员信息:
学生卡
学生服装
学生鞋子
···