GUI 单体(Singleton)创建型模式
目标 确保一个类只有一个实体,同时提供能够作为全局变量使用 问题 一些类应该恰好只有一个实体。例如,代表真实硬件资源的对象,如硬盘,打印机,网络,特殊的系统对象如垃圾桶,在任何一个GUI中都应该只有一个。你该如何管理这些独一无二的对象呢?
约束 GUI Singleton 模式解决了以下约束:
· 这些对象应该只有一个实体。
· 单个实体应该能够容易找得到。
· 用户界面应当一致。
· 屏幕资源是有限的。
解决方案 创建一个Singleton 对象,设计类使得用户不能拷贝或删除对象。GUI启动时就创建它,把它放到屏幕上(通常是桌面),这样它总是容易找到。
案例 WINDOWS95里面的垃圾桶是一个Singleton。它没有大多数对象提供的删除和重命名命令。
结果 GUI Singleton 模式有如下优缺点:
+只有一个单体实体能被创建
+单体很容易在桌面上找到
+单体具有象其他对象一样的行为
GUI 适配器(Adaptor)结构型对象 目标 把一个类的接口转成使用者期望的接口。,适配器模式让接口不兼容的类可以协同工作。 问题 每个接口有他们自己的世界,都有自己的文化,语言,样式。 使用者经常需要保有好几个世界。例如,当使用从GUI桌面继承下来的框架应用,或从另外一个桌面使用这个桌面。用户如何使用不兼容接口呢?
约束 GUI Adaptor 模式解决了以下约束:
· 用户需要使用有不兼容接口的对象
· 你不想改变这个接口
· 用户界面应当保持一致
解决方案 创建一个适配器对象,这个对象包容了另一个对象的接口。适配器是有主接口的正常对象,包容了被包含的接口。用户可以通过适配器与被包容的接口交互。适配器通常还提供了带外(out-of-band)操作来控制两个接口之间的连接。 案例 Window NT 接口可以适配以便在 X Windows 系统下运行(Tektronix菜单条控制适配器)。Windows NT 可以 通过终端模拟器来容纳文本式应用程序。
结果 GUI 适配器模式有如下优缺点:
+可以通过主接口来使用被包容的接口
+两个接口都无需改变
+通用适配器可以适配一系列接口,比如所有的文本应用程序。
-如果适配器中未遵循主接口的习惯用法,会导致用户接口不一致
已知应用 大多数GUI通过终端模拟器来支持文本式应用程序。Windows 和Macintosh界面可以适配运行在X系统中,或者相反。网页浏览器把www用户界面适配到范围很广的主界面。
参看 一个老式的包装器(Wrapper)是这种模式的更通用的形式。
GUI 组合(Composite)结构型对象
目的 把对象组合成树状机构来代表部分-整体层级。组合模式可以让用户统一对待单个对象和对象的组合。
问题 许多GUI对象是由其他GUI对象递归组成的。比如,磁盘包含了目录,目录又包含其他目录和文件。用户应该如何操纵这些组合对象?
约束 GUI组合模式解决了如下约束:
· 用户需要控制整个组合对象
· 用户需要控制组合对象中的单个部分。
· 用户界面应当一致
解决方案 创建能够递归包含其他对象的组合式对象,包括组合对象和原始对象。为所有由原始对象和组合对象共享的操作建立一个共同类。具体对象应继承于这个类,并扩展以提供它们自己的操作。