設計模式_裝飾者模式

裝飾者模式官方的定義是:

動態的將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案

在我的觀點中,對裝飾者模式的定義是:
* 使用組合,在特定方法中調用特定接口的特定方法,實現一些功能,因爲使用了接口,所以可以給已經寫好的被裝飾者動態的利用組合添加一些功能(Head First中使用的是抽象類,然後使用的是繼承,對於繼承有點排斥,而且書中對於使用抽象類的原因並沒有說明,所以就使用了接口)。

被裝飾者 首先利用接口獲得類型,然後裝飾者中對象組合的方法獲得行爲。

代碼如下:

package com.decorator;
interface SubDecorator{
    public void discript();
    public int cost();
}
class SubDecoratorImp_1 implements SubDecorator{
    public SubDecorator sd;
    public SubDecoratorImp_1(SubDecorator sb){
        sd = sb;
    }

    public void discript() {
        // TODO Auto-generated method stub
        System.out.println("some thing broking 2");
        sd.discript();
    }

    public int cost() {
        // TODO Auto-generated method stub
        return sd.cost()+2;
    }
}


class BeDecoratorImp_1 implements SubDecorator{
    public int cost() {
        // TODO Auto-generated method stub
        return 1;
    }
    public void discript() {
        // TODO Auto-generated method stub
        System.out.println("some thing have break");
    }
}

public class MineDecorator {
    public static void main(String[] args) {
        SubDecorator bd=new BeDecoratorImp_1();
        bd = new SubDecoratorImp_1(bd);
        bd.discript();
        System.out.println(bd.cost());
    }
}

Java源碼中使用裝飾者模式的主要有:I/O(inputStream(file,Stringbuffer等前綴的inputStream))詳細可以參看Thingk in Java部分關於JavaI/O的部分,github上關於裝飾者模式的詳解:地址

  • 裝飾者模式一般與工廠模式連用,所以可以解決代碼中會產生很多小類的問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章