如何设计一个复杂的图形用户界面,同时使用构建器设计模式和抽象设计模式?

Posted

技术标签:

【中文标题】如何设计一个复杂的图形用户界面,同时使用构建器设计模式和抽象设计模式?【英文标题】: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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于如何设计一个复杂的图形用户界面,同时使用构建器设计模式和抽象设计模式?的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 - 装饰器模式

三十Java图形化界面设计——布局管理器之CardLayout(卡片布局)

Java图形化界面设计——布局管理器之CardLayout(卡片布局)

@2x 图像不显示在 XCode4 界面构建器设计器中

如何使用 Laravel 的查询构建器执行嵌套连接?

Java图形化界面设计——布局管理器之GridBagLayout