設(shè)計(jì)模式--裝飾模式(Decorator) 收藏
裝飾模式 概述 動態(tài)地給一個(gè)對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。適用性 1.在不影響其他對象的情況下,以動態(tài)、透明的方式給單個(gè)對象添加職責(zé)。 2.處理那些可以撤消的職責(zé)。
3.當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)充時(shí)。參與者 1.Component
定義一個(gè)對象接口,可以給這些對象動態(tài)地添加職責(zé)。 2.ConcreteComponent
定義一個(gè)對象,可以給這個(gè)對象添加一些職責(zé)。 3.Decorator
維持一個(gè)指向Component對象的指針,并定義一個(gè)與Component接口一致的接口。 4.ConcreteDecorator
向組件添加職責(zé)。Exampleview plaincopy to clipboardprint? Component
public interface Person { void eat();
} ConcreteComponent public class Man implements Person { public void eat() {
System.out.println("男人在吃"); } } Decorator public abstract class Decorator implements Person { protected Person person;
public void setPerson(Person person) { this.person = person; } public void eat() { person.eat(); } } ConcreteDecorator public class ManDecoratorA extends Decorator { public void eat() {
super.eat(); reEat(); System.out.println("ManDecoratorA類"); } public void reEat() {
System.out.println("再吃一頓飯"); } } public class ManDecoratorB extends Decorator { public void eat() { super.eat(); System.out.println("==============="); System.out.println("ManDecoratorB類"); } } Test public class Test { public static void main(String[] args) {
Man man = new Man(); ManDecoratorA md1 = new ManDecoratorA(); ManDecoratorB md2 = new ManDecoratorB(); md1.setPerson(man); md2.setPerson(md1); md2.eat(); } } result 男人在吃 再吃一頓飯 ManDecoratorA類 =============== ManDecoratorB類 發(fā)表于 @ 2009年05月09日 17:39:00 | 評論( 0 ) | 編輯| 舉報(bào)| 收藏 本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/terryzero/archive/2009/05/10/4163730.aspx
|
|