支持多种视感标准
- 重新定位一个平台不应该花费大量的成本
- 运行时改变Lexi的外观和感觉
- 每个窗口的视觉标准一定不一样
对象创建的抽象
- 我们假定两个窗口组件图元集合来实现多个视感标准:
- 第一个集合是由Glyph子类构成的
- 第二个集合是由与抽象子类对应在不同视感标准的具体的子类构成的
注意:很明显Lexi的实现不能直接通过调用C++的构造器去创建各个图元,那样会将按扭硬性定义成一种特殊的风格,并且不能在运行时刻改变选择风格
通常我们会使用以下C++代码来创建一个Motif滚动图元实例
ScrollBar* sb = new MotifScrollBar
可是如果想要把Lexi的视感标准依赖降低到最小的话,这种代码要尽量避免。采用以下的代码通常是更好的选择
ScollBar* sb = guiFactory->CreateScrollBar();
这里的guiFactory
是MotifFactory
类的实例的基类指针。CreateScrollBar
为所需要的视感返回一个合适的ScrollBar
子类的实例指针,如MotifScrollBar*
。一旦和客户相关联,它就等价于调用一个MotifScrollBar
的构造器。
- 两者的区别在于:
- 不会在程序代码中直接提及
Motif
的名字- 不局限于创建滚动条图元,还适用于其它包括滚动条、按扭、输入域、菜单等窗口组件图元