如何为窗口系统实现抽象工厂

时间:2016-07-09 08:11:18

标签: user-interface design-patterns

我刚开始一个新的编码项目。我可能领先于自己,但我已经陷入困境。我想为GUI实现一个抽象工厂,类似于Wikipedia上的示例。然而,各种系统具有用于创建窗口的自己的参数。目前,我已经提出了以下解决方案来解决我的困境:

  1. 根据编译器指令创建一个不同的类型
  2. 不要使用编译器指令,只需将所有内容放在包含每个可能的数据成员的类型中
  3. 创建多态层次结构并在每个窗口函数中使用动态强制转换
  4. 使用某种保存信息的中间单身人士。这似乎是特别的。无益,也可能涉及铸造。
  5. 使用其他模式,例如构建器。
  6. 我的目标是创建统一的高级接口,以便为所有平台创建窗口等是相同的。

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

    提前致谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

阅读完之后,我意识到我可以先使用依赖注入来创建具体的工厂。由于入口点知道它正在使用哪种工厂,因此可以传递给客户端。我不敢相信我之前没有看到它,但我认为依赖注射“点击”直到现在。

答案 2 :(得分:0)

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

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

}