我正在实施抽象工厂设计模式。我考虑的场景如下。
。文章和图片鸣谢来自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()
答案 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()