composite

博客介绍了Java中Composite模式的经典案例,如AWT的Component - Container体系,通过对象组合形成树状层次结构。还提及JUnit最佳实践,分析了Composite模式优缺点,指出用户可统一处理组合与单个对象,但限制组件较难。此外,提到对元素操作常使用visitor和iterator模式。

定义

名称:  composite

结构:



意图:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

适用性:

  • 你想表示对象的部分-整体层次结构。
  • 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    效果:



经典案例

1、Java AWT Component-Container
        毫无疑问的,AWT中的Component-Container体系就是一个很好的Composite模式的例子。Container继承于Component,而Container中有可以包含有多个Component,因为Container实际上也是Component,因而Container也可以包含Container。这样通过Component-Container结构的对象组合,形成一个树状的层次结构。这也就是Composite模式所要做的。
        Composite模式是为了简化编程而提出的,一般的在编程的时候,如果严格的区分Component和Container的话,有时候会带来许多不便,而且这些往往是没有必要的。比如,我要在一个Container中放置一个Component,我并不需要知道这个Component到底是一个Container,或者就是一个一般的Component,在父级容器中所要做的,只是记录一个Component的引用,在需要的时候调用Component的绘制方法来显示这个Component。当这个Component确实是一个Container的时候,它可以通过Container重载后的绘制方法,完成对这个容器的显示,并把绘制消息传递给到它的子对象去。也就是说,对一个父级容器而言,它并不不关心,其子对象到底是一个Component,还是一个Container。它需要将Component和Container统一对待。

2、JUnit



最佳实践

1、Composite优缺点
        优点:对于Composite模式,也许人们一开始的注意力会集中在它是如何实现组合对象的。但Composite最重要之处在于用户并不关心是组合对象还是单个对象,用户将以统一的方式进行处理,所以基类应是从单个对象和组合对象中提出的公共接口。
  缺点:Composite最大的问题在于不容易限制组合中的组件。
        使用改进的composite模式可以缓和这个矛盾,见参考文章2。


相关模式
1、visitor / iterator
        在对composite中的元素进行集体操作或遍历操作时,经常使用visitor模式和iterator模式

参考文章
1、设计模式之Composite(组合)
        http://dev.youkuaiyun.com/article/52/52259.shtm
2、从Java类库看设计模式 (Composite,Strategy,Iterator)
         http://www.sawin.com.cn/doc/SD/UML/classlib.htm
3、诊断 Java 代码: 深度优先访问器和中断的分派
        http://www-900.ibm.com/developerWorks/cn/java/j-diag/part20/index.shtml

CompizConfig 是一个用于配置 Compiz 窗口管理器的工具,而 Composite 是 X 窗口系统的一个扩展,它允许窗口进行合成,实现诸如透明、阴影等视觉效果。 ### CompizConfig 使用与配置 - **安装**:在基于 Debian 或 Ubuntu 的系统中,可以使用以下命令安装 CompizConfig 设置管理器: ```bash sudo apt-get install compizconfig-settings-manager ``` - **启动**:安装完成后,可以通过应用程序菜单搜索“CompizConfig Settings Manager”来启动它,或者在终端中输入 `ccsm` 命令启动。 - **配置**:启动 CompizConfig 设置管理器后,会看到一个包含各种插件的列表。每个插件都对应着 Compiz 的一项功能,例如窗口动画、桌面切换等。用户可以通过勾选插件来启用或禁用相应功能,还可以点击插件名称进入详细设置页面,对插件的参数进行调整。 ### Composite 使用与配置 - **启用**:通常在现代 Linux 发行版中,Composite 扩展会默认启用。如果需要手动启用,可以编辑 X 窗口系统的配置文件(通常是 `/etc/X11/xorg.conf` 或 `/etc/X11/xorg.conf.d/` 目录下的相关文件)。在 `Section "ServerLayout"` 部分添加或确保以下行存在: ```plaintext Option "Composite" "Enable" ``` - **与 Compiz 结合**:Compiz 依赖于 Composite 扩展来实现其高级视觉效果。当启用 Compiz 时,Composite 会自动被使用。如果在使用 Compiz 时遇到问题,可以检查 Composite 扩展是否正常工作。可以使用 `/usr/lib/nux/unity_support_test -p` 命令检测基于 Compiz 的 Unity 3D 界面是否能正常运行,该命令也在一定程度上反映了 Composite 相关的运行情况 [^1]。 ### 显卡驱动与 Compiz 和 Composite 的关系 如果在使用 Compiz 和 Composite 时遇到问题,可能与显卡驱动有关。可以到官网(http://www.nvidia.com/page/drivers.html )下载最新的驱动进行安装。在选择驱动时,gf6 以后的显卡用 195.xx.xx,gf5 用 173.xx.xx,gf4 到 gf2 用 96.43.16 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值