裝飾者設計模式 通俗易懂

1.1    簡述及實現原則

裝飾模式:在不改變 原有類 和 不使用繼承的狀況下, 動態地擴展一個對象的功能。java

因會建立一個包裝對象,來包裹真實對象而得名。設計模式

做用:加強對象的功能測試

例子1:this

牆: 功能---遮風擋雨spa

  包了牆紙的牆(本質仍是牆):設計

        原功能---遮風擋雨code

        新增功能---陶冶情操對象

        一、沒有改變原有類繼承

        二、進行動態地加強接口

裝飾類:加強功能的類(包了牆紙的牆)

被裝飾類:待加強功能的類(牆)

實現原則

一、 裝飾類必須實現被裝飾類的全部接口

二、裝飾類中必須獲取被裝飾類對象

1.2   案例演示

準備代碼

Phone接口:

public interface Phone {
   void call(String number);
   void sendMsg();
}

HWPhone實現類:

public class HWPhone implements Phone {
   public void call(String number) {
     System.out.println("撥打電話:"+number);
   }
   public void sendMsg() {
     System.out.println("發送短信");
   }
}

分析:

一、定義一個裝飾類 實現 Phone接口

二、裝飾類中 獲取到 被裝飾類對象(成員變量)

代碼實現:

HWPhoneDecorator:

public class HWPhoneDecorator implements Phone {
    //被裝飾類的對象
    private HWPhone old;
    public HWPhoneDecorator(HWPhone old) {
        this.old = old;
    }
    /*
    * 打電話方法不須要加強,不須要改變
    * */
    public void call(String number) {
        old.call(number);
    }
    /**
     * 發短信方法須要被加強
     */
    public void sendMsg() {
        //一、先運行原來的功能
        old.sendMsg();
        //二、再執行新的加強代碼
        System.out.println("(o゜▽゜)o☆[BINGO!]");
    }
}

測試類:

public static void main(String[] args) {
    Phone hw = new HWPhoneDecorator(new HWPhone());
    hw.call("12345");
    hw.sendMsg();
}

未使用裝飾者設計模式效果

撥打電話:12345

發送短信

使用裝飾者設計模式效果

撥打電話:12345

發送短信

(o゜▽゜)o☆[BINGO!]

相關文章
相關標籤/搜索