【问题标题】:Abstract Factory design pattern for the scenario ThemeFactory场景 ThemeFactory 的抽象工厂设计模式
【发布时间】:2019-03-15 04:05:35
【问题描述】:

我正在实施抽象工厂设计模式。我考虑的场景如下。

。文章和图片来源来自https://medium.com/@hitherejoe/design-patterns-abstract-factory-39a22985bdbf。我正在尝试在 Python 中实现,但由于以下原因,我被卡住了,无法继续前进

当您在 Python 中将 ThemeFactory 定义为接口时,您在 ThemeFacory 中定义的任何方法都必须在 LightTheme 和 DarkTheme 等具体类中实现。

但我担心的是,是否有必要为具体类 DarkTheme 中的方法 createLightTheme 提供实现,反之亦然。我是否需要重新设计完整的架构?

 import abc

 class ThemeFactory(metaclass=abc.ABCMeta):

     @abc.abstractmethod
     def createdarktheme(self):
         pass

     @abc.abstractmethod
     def createlighttheme(self):
         pass


 class DarkTheme(ThemeFactory):

     def createdarktheme(self):
        print('Hello created dark theme')

     def createlighttheme(self):
        pass


if __name__== '__main__':

   dark = DarkTheme()
   dark.createdarktheme()

【问题讨论】:

  • 这看起来不太正确。

标签: python design-patterns


【解决方案1】:

Ray's answer 是正确的,因为您所指的图表不正确。

ThemeFactory 应该创建 Themes,而 DarkTheme 和 LightTheme 应该是 Theme 的实现。

代码大致如下:

from abc import ABC, abstractmethod

class ThemeFactory(object):
     def createdarktheme(self) -> Theme:
         return DarkTheme()

     def createlighttheme(self) -> Theme:
         return LightTheme()

class Theme(ABC):
   @abstractmethod
   createToolbar() -> ToolBar:
       pass

   @abstractmethod
   createDialog() -> Dialog:
       pass

class DarkTheme(Theme):
   createToolbar() -> ToolBar:
       return DarkToolbar()

   createDialog() -> Dialog:
       return DarkDialog()


if __name__== '__main__':

   factory = ThemeFactory()
   dark = factory.createdarktheme()

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多