设计模式(8) 组合模式(COMPOSITE)(一)

2014-11-24 02:55:14 · 作者: · 浏览: 0

问题聚焦: 结构型模式的本质是:对象组合。 而本节所展示的模式,就是典型的结构型模式。 那对象组合成什么结构呢?组合模式主要将对象组合成树形结构,表示”部分-整体“的层次结构。


意图: 将对象组合成树形结构,以表示”整体-部分“的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有一致性。
动机: 以绘图编辑器和图形捕捉系统这样的图形应用程序为例。 设计者可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合形成更大的组件。这种暴力组合方式,也是我们经常使用的。 设计:为Text和Line这样的图元定义一些类,另外定义一些类作为这些图元的容器类。 这种方法存在的问题:使用这些类的代码必须区别对待图元对象与容器对象 组合模式的处理方法:递归组合 用组合模式吹的关键:一个抽象类,既可以代表图元,又可以代表图元的容器。 设计:
    抽象类(Graphic,声明一些特定特性对象相关的操作,如Draw,和所有组合对象共享的操作)
  • 子类Line,Rectangle和Text定义了一些图元对象
  • Picture类定义了一个Graphic对象的聚合,Picture的Draw操作是通过对它的子部件调用Draw实现,Picture还用这种方法实现了一些与其子部件相关的操作。同时,由于Picture接口与Graphic接口是一致的,因此Picture对象可以递归地组合其他Picture对象 \ \
    一个典型的由递归组合的Graphic对象组成的组合对象结构如下图所示: \ \


    适用性: 一下情况使用组合模式:
    • 表示对象的部分-整体层次结构
    • 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象 结构: \
      \ 典型的组合模式对象结构: \
      vcDgvdO/2tPr1+m6z73hubnW0LXEttTP87340NC9u7ulCsjnufu908rV1d/Kx9K7uPbStr3ateOjrNTy1rG907SmwO3H68fzo7vI57n7vdPK1dXfysdDb21wb3NpdGWjrMv8zaizo72rx+vH87eiy824+Mv8tcTX07K/vP6jrNTa16q3osfrx/PWrsewuvPWrrrzv8nE3Na00NC1xNK70Km4qNb6stnX9woKPGhyPgo8YnI+CgrQp7n7o7oKCjx1bD4KPGxpPrao0uXBy7D8uqy7+bG+ttTP87rN1+m6z7bUz/O1xMDgsuO0zr3hubmjurXduenX6brPPGxpPrzyu6+/zbuntPrC66O60rvWwrXYyrnTw9fpus+94bm5us21pbj2ttTP8zxsaT7KubXDuPzI3dLX1Pa809DCwODQzbXE1+m8/qO6t72x49DC1PbX6brPveG5ubvy1d/Str3ateM8bGk+yrm1w8TjtcTJ6LzGseS1w7j8vNPSu7Dju68KyrXP1qO6CjEgz9TKvbXEuLiyv7z+0v3TwwogICAgsaOz1rTT19Oyv7z+tb24uLK/vP61xNL908PE3Lzyu6/X6brPveG5ubXEsenA+rrNudzA7aGjCjIgubLP7dfpvP4KICAgILmyz+3X6bz+v8nS1Lz1ydm21MTatOa1xNDox/OhowozINfutPO7r0NvbXBvbmVudL3Tv9oKICAgINfpus/Eo8q9tcTEv7XE1q7Su77NysfKubXD08O7p7K71qq1wMv7w8fV/dTayrnTw7XEvt/M5bXETGVhZsDgu7nKx0NvbXBvc2l0ZcDgoaMKICAgIM6qwcu077W91eLSu8S/tcSjrENvbXBvc2l0ZcDg06bOqkxlYWbA4LrNQ29tcG9zaXRlwOC+ob/JxNy24Lao0uXSu9Cpuau5srLZ1/ehowo0IMn5w/e53MDt19Oyv7z+tcSy2df3CiAgICC53MDt19Oyv7z+tcSy2df3t8XWw8671sO1xNGh1PGjugogICAgzbjD99DUo7q9q7ncwO3X07K/vP61xLLZ1/e3xdTas+nP88DgQ29tcG9uZW501tCjrMvkyLvV4tCpstnX97bUTGVhZsDgw7vT0NLi0uWhowogICAgsLLIq9DUo7rU2tfpus+21M/z1tC3xdbDudzA7dfTsr+8/rXEstnX96Os0vLOqta709DX6brPttTP87LF09DX07K/vP6howogICAgyOe6ztGh1PHIob7209rI57rOyKHJ4aGjCjUg1+m6z8Sjyr3Kx7fx06a4w8q1z9bSu7j2Q29tcG9uZW50wdCx7QogICAg08nT2tK2vdq147Kiw7vT0NfTvdq146Osy/nS1Mjnufu92rXjyv3Ev73PydnKsaOsv8nS1L+8wse9q9fTvdq1473hus+2qNLlzqrSu7j2yrXA/bHkwb+jrMi7uvPJ+cP30rvQqbLZ1/e21NfTvdq147340NC3w87Kus253MDtoaMKNiDX07K/vP7FxdDyCiAgICDI57n7v7zCx9fTvdq147XEy7PQ8qOssdjQ69fQz7i12MnovMa21NfTvdq147XEt8POyrrNudzA7b3Tv9qjrNLUseO53MDt19O92rXj0PLB0KGjCiAgICC688Pmy/m96cnctcS1/LT6xvfEo8q9o6hJdGVyYXRvcqOpu+HU2tXit73D5rj40+jSu9Cp1qq1wKGjCjcgyrnTw7jfy9m7urPltOa0orjEycbQ1MTcCiAgICDI57n7xOPQ6NKqttTX6brPvfjQ0Ma1t7G1xLHpwPq78rLp1dKjrENvbXBvc2l0ZcDgv8nS1Lu6s+W05rSittTL/LXE19O92rXjvfjQ0LHpwPq78rLp1dK1xM/gudjQxc+ioaMKOCDTprjD08nLrcm+s/1Db21wb25lbnQKICAgINTaw7vT0MCsu/i72MrVu/rWxrXE0+/R1NbQo6y1sdK7uPZDb21wb3NpdGWxu8/6u9nKsaOszaizo9fuusPTyUNvbXBvc2l0Zbi61PDJvrP9xuTX073ateOho8jnuftMZWFmttTP87G7ubLP7aOs1PK/ydLUsrvJvrP9o6i1sci7o6zV4sqxuvLT1r/JxNzQ6NKq0v3Tw7zGyv3AtLncwO3V4tCpubLP7dfpvP6jqaGjCjkgtOa0otfpvP7X7rrD08PExNK71tbK/b7dveG5uQogICAgyv2+3b3hubm1xNGh1PHIob7209rQp8LKo7rB0LHto6zK96Osyv3X6brNaGFzaLHttrzKx7/J0aHU8bXEo