装饰模式是在不必改变原类文件和使用继承的情况下,动态地给一个对象添加一些额外的功能。它是通过创建一个包装对象来包裹真实的对象。装饰模式比生成子类更为灵活。
一.角色:
(1)抽象构件(Component)角色:定义一个对象接口,可以给这些对象动态地添加职责。
(2)具体构件(ConcreteComponent)角色:定义了一个具体的对象,也可以给这个对象添加一些职责。
(3)装饰(Decorator)角色:装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,无需知道Decorator的存在。
(4)具体装饰(ConcreteDecorator)角色:具体的装饰对象,起到给Component添加职责的功能。
结构图:

举个例子:现在流行在家里的墙上挂十字绣,其中Component就是我们所看到的挂好的十字绣;ConcreteComponent是用线绣好的那块布;DecZ http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcmF0b3LKx9ewyq7X1tDltcSyo8Gnv/Kju0NvbmNyZXRlRGVjb3JhdG9yQcrHsqPBp7/yy8TW3LXEv/LX06OsQ29uY3JldGVEZWNvcmF0b3JCyseyo8GnsOWju9XivLiyv7fWtryxu7nS1NrBy8e9yc+ho9Xiz8LH5bP+wcuwyaOh0afPsNKqus3J+rvuvfTD3MGqz7WhozwvcD4KPGgxPrb+LsrK06azob6wo7o8L2gxPgo8cD48L3A+CjxwPjwvcD4KPHA+MS7Q6NKqwKnVudK7uPbA4LXEuabE3KOsu/K4+NK7uPbA4MztvNO4vbzT1rDU8KGjPC9wPgo8cD4yLtDo0qq2r8ystcS4+NK7uPa21M/zzO2807mmxNyjrNXi0Km5psTcv8nS1NTZtq/MrLXEs7fP+qGjPC9wPgo8cD4zLtDo0qrU9rzT08nSu9Cpu/mxvrmmxNy1xMXFwdDX6brPtviy+sn6tcS3x7OjtPPBv7XEuabE3KOstNO2+Mq5vMyz0LnYz7Wx5LXEsrvP1sq1oaM8L3A+CjxwPjQutbGyu8TcssnTw8n6s8nX08DgtcS3vbeovfjQ0MCps+TKsaGj0rvW1sfpv/bKx6Osv8nE3NPQtPPBv7bAwaK1xMCp1bmjrM6q1qez1sO/0rvW1tfpus+9q7L6yfq088G/tcTX08Dgo6zKubXD19PA4Mr9xL+zyrGs1ajQ1NT2s6Sho8Ht0rvW1sfpv/a/ycTcysfS8s6qwOC2qNLlsbvS/rLYo6y78sDgtqjS5bK7xNzTw9PayfqzydfTwOChozwvcD4KPGgxPsj9LtPFyLG146O6PC9oMT4KPHN0cm9uZz7TxbXjo7o8L3N0cm9uZz4KPHA+PC9wPgo8cD4xLsnovMbEo8q90+u8zLPQudjPtbXExL+1xLa8ysfSqsCp1bm21M/ztcS5psTco6y1q8rHyei8xsSjyr2/ydLUzOG5qbHIvMyz0Lj8tuC1xMHpu+7Q1KGjPC9wPgo8cD4yLs2ouf3KudPDsrvNrLXEvt/M5dewys7A4NLUvLDV4tCp17DKzsDgtcTFxcHQ1+m6z6Osyei8xsqmv8nS1LS01Oyz9rrctuCyu82s0NDOqrXE1+m6z6GjPC9wPgo8c3Ryb25nPsixteOjujwvc3Ryb25nPgo8cD48L3A+CjxwPjEu1eLW1rHIvMyz0Lj8vNPB6bvuu/q2r7XEzNjQ1KOs0rLNrMqx0uLOttfFuPy807bgtcS4tNTT0NShozwvcD4KPHA+Mi7XsMrOxKPKvbvhtbzWwsnovMbW0LP2z9bQ7bbg0KHA4KOsyOe5+7n9tsjKudPDo6y74cq5s8zQ8rHktcO63Li01NOhozwvcD4KPHA+My7XsMrOxKPKvcrH1eu21LPpz/PX6bz+o6hDb21wb25lbnSjqcDg0M2x4LPMoaO1q8rHo6zI57n7xOPSqtXrttS+38zl1+m8/rHgs8zKsaOsvs3TprjD1tjQwsu8v7zE47XE06bTw7zcubmjrNLUvLDXsMrO1d/Kx7fxus/KyqGjtbHIu9Kyv8nS1LjEseRDb21wb25lbnS907/ao6zU9rzT0MK1xLmrv6q1xNDQzqqjrMq1z9ahsLDrzbjD96GxtcTXsMrO1d/Eo8q9oaPU2sq1vMrP7sS/1tDSqtf2s/bX7rzR0aHU8aGjPC9wPgo8aDE+y8Quyei8xtSt1PKjujwvaDE+CjxwPjwvcD4KPHA+MS624NPD1+m6z6OsydnTw7zMs9ChozwvcD4KPHA+wPvTw7zMs9DJ6LzG19PA4LXE0NDOqqOsysfU2rHg0uvKsb6yzKy+9raotcSjrLb4x9LL+dPQtcTX08Dgtry74bzMs9C1vc/gzay1xNDQzqqho8i7tvijrMjnufvE3Lm7wPvTw9fpus+1xNf2t6jAqdW5ttTP87XE0NDOqqOsvs2/ydLU1NrUy9DQyrG2r8ystdi9+NDQwKnVuaGjPC9wPgo8cD4yLsDg06bJ6LzGtcS21MCp1bm/qrfFo6y21NDeuMS52LHVoaM8L3A+CjxwPgozLsSjyr3Txbuvo7rI57n71rvT0NK7uPZDb25jcmV0ZUNvbXBvbmVudMDgtvjDu9PQs+nP87XEQ29tcG9uZW50vdO/2sqxo6y/ydLUyMNEZWNvcmF0b3K8zLPQQ29uY3JldGUgQ29tcG9uZW50o7vI57n71rvT0NK7uPZDb25jcmV0ZURlY29yYXRvcsDgyrGjrL/J0tS9q0RlY29yYXRvcrrNQ29uY3JldGUgRGVjb3JhdG9yus+yoqGjPC9wPgo8aDE+zuUutPrC68q+t7ajujwvaDE+CjxwPgqx4NC0uPjIy7TuxeSyu82st/7KzrXEs8zQ8jxicj4KPC9wPgo8cD4KPC9wPgo8aDI+MS7OtMq508PXsMrOxKPKvTwvaDI+Cgo8cD48L3A+CjxwPgo8c3Ryb25nPigxKbT6wuu94bm5zbyjujwvc3Ryb25nPjwvc