【问题标题】:How can I design a complex GUI employing both builder design pattern and abstract design pattern?如何设计一个复杂的图形用户界面,同时使用构建器设计模式和抽象设计模式?
【发布时间】:2021-11-23 23:13:28
【问题描述】:

我正在尝试创建一个复杂的 GUI,比如说包含列表面板和按钮面板的主面板。按钮面板将再次包含几个按钮。 构造顺序是这样的:

constructMainPanel()
constructListPanel(mainpanel)
constructButtonPanel(mainPanel)
constructButton('b1',buttonPanel)
constructButton('b2',buttonPanel)

此 GUI 将有 2 种样式:Linux 和 Windows。 如何使用构建器设计模式和抽象工厂设计模式来设计这个 GUI? 类图会是什么样子?

我了解构建器和抽象工厂模式,但我如何将它们一起使用。 这是我提到的构建器模式builder pattern wiki。 这是我参考的抽象工厂模式abstract factory wiki

【问题讨论】:

    标签: oop design-patterns builder class-diagram abstract-factory


    【解决方案1】:

    这两种模式的合作方式如下:

    • 抽象工厂将用于创建组件(面板、列表面板、按钮...)
    • 建造者将标准化构建零件和组装整体的步骤。

    很难更具体/准确,因为每种模式都有变化。但它可能看起来像(伪代码):

    factory = new LinuxGUIFactory ();  
    builder = new ListChoiceBuilder (factory) // inject the factory 
    builder.buildPanels()
    builder.buildApproveCancelButtons(); 
    form = builder.GetResult(); 
    

    ListChoiceBuilder 将使用抽象工厂作为构造函数参数。然后它会在需要创建面板、列表面板、按钮......时调用抽象工厂的抽象方法。

    当您实例化 ListChoiceBuilder 时,您提供了 Linux、Windows 或 MacOs 的具体工厂,它们使用与抽象工厂完全相同的接口。当然,构建器对于这样一个简单的 GUI 示例来说是多余的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多