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)

 

3.注意编程规范。

posted @ 2024-11-27 08:15  The-rich  阅读(10)  评论(0)    收藏  举报