如何设计一个复杂的图形用户界面,同时使用构建器设计模式和抽象设计模式?
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(卡片布局)