9.30
实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1. 画出对应的类图;
2. 提交源代码;
from abc import ABC, abstractmethod
# 抽象产品类
class ProductA(ABC):
@abstractmethod
def use(self):
pass
class ProductB(ABC):
@abstractmethod
def display(self):
pass
# 具体产品类
class ConcreteProductA1(ProductA):
def use(self):
print("使用Windows风格的按钮")
class ConcreteProductB1(ProductB):
def display(self):
print("显示Windows风格的文本框")
class ConcreteProductA2(ProductA):
def use(self):
print("使用Mac风格的按钮")
class ConcreteProductB2(ProductB):
def display(self):
print("显示Mac风格的文本框")
# 抽象工厂类
class AbstractFactory(ABC):
@abstractmethod
def create_product_a(self) -> ProductA:
pass
@abstractmethod
def create_product_b(self) -> ProductB:
pass
# 具体工厂类
class ConcreteFactory1(AbstractFactory):
def create_product_a(self) -> ProductA:
return ConcreteProductA1()
def create_product_b(self) -> ProductB:
return ConcreteProductB1()
class ConcreteFactory2(AbstractFactory):
def create_product_a(self) -> ProductA:
return ConcreteProductA2()
def create_product_b(self) -> ProductB:
return ConcreteProductB2()
# 客户端代码
def client_code(factory: AbstractFactory):
product_a = factory.create_product_a()
product_b = factory.create_product_b()
product_a.use()
product_b.display()
# 使用具体工厂1来创建产品
factory1 = ConcreteFactory1()
client_code(factory1)
print("\n") # 添加换行以区分两个工厂的输出
# 使用具体工厂2来创建产品
factory2 = ConcreteFactory2()
client_code(factory2)
浙公网安备 33010602011771号