6 裝飾模式

2021-08-31 19:53:19 字數 1600 閱讀 8417

不是我不小心,只是真情難以尋覓,不是我存心故意,只因無法找到良機,哈哈!!!精闢

decorator(裝飾模式)

動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活.

什麼時候使用?

也就是說是為已有的功能動態地新增更多功能的一種方式,當系統需要新功能的時候,是向舊的類中新增新的**,這些新加的**通常裝飾了原有類的核心職責或主要行為.

但問題是,它們在主類中加入了新的字段,新的方法和邏輯,從而增加了主類的複雜度,而這些新加入的東西僅僅是為了滿足一些只在某種特定情況下才會執行的特殊行為的需要,裝飾模式卻提供了乙個非常好的解決方案,它把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,因此,當需要執行特殊行為時,客戶**就可以在執行時根據需要有選擇地,按順序的使用裝飾功能包裝物件.

裝飾模式的裝飾順序很重要.可以自己調節!

下面來看看**實現

抽象類人!

public abstract class person

抽象類,老師!(繼承於人類)

public abstract class teacher extends person

@override

public void action()

}

//具體的老師

import lesson3.dao.teacher;

public class teacherjason extends teacher

//這裡具體老師可以有自己的特點,可以擴充套件

// private string sayhello()

}

老師可以有愛好

//愛好類

public class hobby extends person

}

注意測試!!!

public class test

}

結果!!

jason老師動作

愛好動作---太極拳

總結一下,整理一下思路!!

1,abstract人類,具有行為(走路,思考...)

2,abstract教師,具有行為(走路,思考,教書,備課...),因為教師需要擴充套件,在這裡我們為他準備了乙個字段,[color=red]protected person person;[/color]並且做了判斷,可以理解為null他不需要擴充套件,反之需要擴充套件!

3,實際教師.

[color=red]system.out.println("jason老師動作");

super.action();

sayhello();[/color]

這個順序可以換,順序改變業務邏輯隨之改變.

4,hobby(這裡我寫的愛好,也許不太好理解!大家可以理解成愛人)

這樣就好很多,當乙個女老師結婚後,身邊會多乙個愛人!!

(愛人必須是人,所以也要繼承person,哈哈)

設計模式 6 裝飾模式

裝飾是一種概念設計模式,允許你通過將物件放入特殊封裝物件中來為原物件增加新的行為 public inte ce datasource介面預設實現類 public class filedatasource implements datasource override public void write...

Chapter 6 裝飾者模式

裝飾者模式的核心是裝飾類和被裝飾類兩個類,這兩個類需要繼承同乙個父類或者實現通過介面,表示這兩個類屬於同乙個類體系中。這裡舉個簡單的例子進行說明,具體參考下列 public class decoratordemo inte ce phone class mobilephone implements ...

設計模式 裝飾模式

裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...