二十三種設計模式之結構型模式之裝飾模式

裝飾模式

概述


動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更爲靈活。

適用性


1.在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責。

2.處理那些可以撤消的職責。

3.當不能採用生成子類的方法進行擴充時。

參與者


1.Component
  定義一個對象接口,可以給這些對象動態地添加職責。

2.ConcreteComponent
  定義一個對象,可以給這個對象添加一些職責。

3.Decorator
  維持一個指向Component對象的指針,並定義一個與Component接口一致的接口。

4.ConcreteDecorator
  向組件添加職責。

類圖


這裏寫圖片描述

例子


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類

Copyright © 2008 Angus Young
瘋狂Java聯盟:http://www.crazyit.org

發佈了10 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章