ABSTRACT FACTORY(抽象工厂)——对象创建形模式(python实现)

抽象工厂(python实现)借鉴与《设计模式》一书中进行python软件代码设计

1 . 意图

提供一个创建一系列相关或者依赖对象的接口,而无需指定它们具体的类。

2 . kit

3 . 动机

假如我们要做一个支持多种视感(look-and-feel)标准的用户界面工具包,例如motif和presentation manager 不同的视感风格如滚动条,窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。

为解决这一个问题我们可以定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一类基本窗口组件的接口。每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于每一个抽象窗口组件,WidgetFactory接口都有一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格,如下图所示
在这里插入图片描述根据以上图片,用python写出其模式如下,创建了五个类,WidgetFactory,WidgetFactory,PMWidgetFactory,ScrollBar,Window

# 创建基本的窗口及滚动条的类
class WidgetFactory(object):
    def __str__(self):
        str_explain = "这是一个创建可视化窗口的类"
        return str_explain

    def __init__(self):
        pass

    def CreateScrollBar(self):
        # 创建一个滚动条
        pass

    def CreateWindow(self):
        # 创建一个窗口
        pass


# motif风格的滚动条创建和窗口创建
class MotifWidgetFactory(WidgetFactory):
    def __str__(self):
        str_explain = "这是创建motif的子类"
        return str_explain

    def __init__(self):
        super(WidgetFactory, self).__init__()

    def CreateScrollBar(self):
        # 创建一个滚动条
        pass

    def CreateWindow(self):
        # 创建一个窗口
        pass


# pm风格的滚动条创建和窗口创建
class PMWidgetFactory(WidgetFactory):
    def __str__(self):
        str_explain = "这是创建PM风格的子类"
        return str_explain

    def __init__(self):
        super(WidgetFactory, self).__init__()

    def CreateScrollBar(self):
        # 创建一个滚动条
        pass

    def CreateWindow(self):
        # 创建一个窗口
        pass


# 创建滚动条的类
class ScrollBar(object):
    def __str__(self):
        str_explain = "这是创建ScrollBar的类"
        return str_explain

    def __init__(self):
        pass

    def PMScrollBar(self):
        # 创建一个PM滚动条
        pass

    def MotifScrollBar(self):
        # 创建一个Motif滚动条
        pass


# 创建window窗口的类
class Window(object):
    def __str__(self):
        str_explain = "这是创建window的类"
        return str_explain

    def __init__(self):
        pass

    def PMWindow(self):
        # 创建一个PM风格的窗口
        pass

    def MotifWindow(self):
        # 创建一个Motif风格的窗口
        pass
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是 Python 实现抽象工厂模式的示例: ```python from abc import ABC, abstractmethod # 抽象工厂 class AbstractFactory(ABC): @abstractmethod def create_product_a(self): pass @abstractmethod def create_product_b(self): pass # 具体工厂 A class ConcreteFactoryA(AbstractFactory): def create_product_a(self): return ProductA1() def create_product_b(self): return ProductB1() # 具体工厂 B class ConcreteFactoryB(AbstractFactory): def create_product_a(self): return ProductA2() def create_product_b(self): return ProductB2() # 抽象产品 A class AbstractProductA(ABC): @abstractmethod def operation_a(self): pass # 具体产品 A1 class ProductA1(AbstractProductA): def operation_a(self): return "Product A1" # 具体产品 A2 class ProductA2(AbstractProductA): def operation_a(self): return "Product A2" # 抽象产品 B class AbstractProductB(ABC): @abstractmethod def operation_b(self): pass # 具体产品 B1 class ProductB1(AbstractProductB): def operation_b(self): return "Product B1" # 具体产品 B2 class ProductB2(AbstractProductB): def operation_b(self): return "Product B2" # 客户端 class Client: def __init__(self, factory: AbstractFactory): self.product_a = factory.create_product_a() self.product_b = factory.create_product_b() def do_something(self): print(self.product_a.operation_a()) print(self.product_b.operation_b()) # 使用 ConcreteFactoryA 创建产品 factory_a = ConcreteFactoryA() client_a = Client(factory_a) client_a.do_something() # 使用 ConcreteFactoryB 创建产品 factory_b = ConcreteFactoryB() client_b = Client(factory_b) client_b.do_something() ``` 希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端工匠之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值