用户界面 - 如何为窗口系统实现抽象工厂



我刚刚开始一个新的编码项目。 我可能领先于自己,但我有点卡住了。 我想为 GUI 实现一个抽象工厂,类似于维基百科上的示例。 但是,各种系统都有自己的参数来创建窗口。 目前,我已经为我的困境提出了以下解决方案:

  1. 创建一个因编译器指令而异的类型
  2. 不要使用编译器指令,而只是将所有内容放在包含所有可能的数据成员的类型中
  3. 创建多态层次结构并在每个窗口函数中使用动态强制转换
  4. 使用某种保存信息的中间单例。这似乎没有帮助,可能还涉及选角。
  5. 请改用其他模式,例如生成器。

我的目标是创建统一的高级接口,以便创建窗口等对所有平台都是相同的。

我对做#5犹豫不决,仅仅是因为看起来这将是一个足够普遍的问题,应该已经有解决方案了。 这只是一个玩具,所以它更多的是关于学习而不是构建实际应用程序。 我知道我可以使用现有的代码库,但这不会实现我真正的目标。

提前谢谢。

我认为

,这取决于情况。但是,如何将抽象工厂与构建器(工厂内部)和装饰器一起使用,并为 GUI 组件提供一些默认值,其中装饰器将为来自不同 GUI 库的类似组件具有相同的界面,并从 GUI 库扩展类。

阅读更多内容后,我意识到我可以先使用依赖注入来创建混凝土工厂。 由于入口点知道它正在使用哪种工厂,因此可以将其传递给客户端。 我不敢相信我以前没有看到它,但我认为直到现在才"点击"

依赖注入。

我会将特定于系统的参数放在每个抽象工厂的构造函数中。

public interface WindowFactory {
 public Window build();
}
public class WindowsWindowFactory implements WindowFactory {
 private param1, param2, param3;
 public WindowsWindowFactory(param1,param2,param3) {} // set params
 public Window build() {} // use params
}
public class LinuxWindowFactory implements WindowFactory {
 private param1, param2;
 public LinuxWindowFactory(param1,param2) {} // set params
 public Window build() {} // use params
}

相关内容

  • 没有找到相关文章

最新更新