场景ThemeFactory的抽象工厂设计模式

时间:2019-03-15 04:05:35

标签: python design-patterns

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

enter image description here。文章和图片鸣谢来自https://medium.com/@hitherejoe/design-patterns-abstract-factory-39a22985bdbf。我试图用Python实现,但由于以下原因,我陷入了困境,无法前进

当您将ThemeFactory定义为Python中的接口时,无论您在ThemeFacory中定义的方法是什么,都必须在诸如LightTheme和DarkTheme之类的具体类中实现。

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

 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()

1 个答案:

答案 0 :(得分:1)

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

ThemeFactory应该创建主题,而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()