現在有乙個需求:設計乙個qq秀,可以隨意搭配服飾。
直接將上**~~~
父類的父類person(為什麼需要父類的父類:乍看父父類其實是可有可無的,但如果刪掉,你會發現父類finery的decorate無法放裝飾者)
package decoratorpattern;
public class person
private string name;
public person(string name )
public void show()
}
父類finery
package decoratorpattern;
public class finery extends person
@override
public void show() }}
子類fineryson
class tshirts extends finery
}class bigtrouser extends finery
}class shoes extends finery
}
介面**(decorater()和show()兩個方法是設計者模式的精髓,首先說一下decorator(),ts呼叫decorator方法,我們知道ts本身是沒有這個方法的,都是從父類finery裡面呼叫,在這個方法裡面,xc物件作為引數賦值給了父父類person,這是為後面的show()作鋪墊,如果不理解,先看後面,之後同理,bt,st都讓前乙個物件作為引數賦值給了父父類,我猜你可能會疑惑,為什麼要讓person這個物件被「重置」了這麼多次呢,有什麼用呢,我們再看下去就知道了,關鍵的show()出來了,st呼叫show()我們可以點進去看看過程是怎麼實現,首先輸出'「鞋子」,然後呼叫了super.show(),st的super是finery,finery呼叫show是呼叫person的show(),而person正式被裝飾了,被bt賦值了!!所以,其實super.show()呼叫的是bt的show,所以再輸出「垮褲」,然後執行bt.show()的super.show(),呼叫了tshirt的show... ... )
package decoratorpattern;
public class main
}
結果:
說一下裝飾者模式的用優點吧:首先他符合開放封閉原則,當你需要新增裝飾類的時候(帽子,褲子之類)不需要對本身已經結構嚴謹的**進行「破壞」,其次
什麼時候使用裝飾者模式:當我們需要往原系統新增新功能的時候,新功能往往只起到了裝飾原系統的核心功能~~另外客戶可以按順興地包裝物件了。
大話設計模式之裝飾者模式
通過閱讀本篇文章,可以給喜歡使用繼承的開發人員提供一種新的思路。我們將會了解濫用繼承帶來的不良後果,同時也會介紹比繼承更合理的實現方式。利用繼承設計子類的行為,是在編譯時期靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件...
大話設計模式之裝飾者模式
裝飾者模式通過使用繼承,能夠將物件一層一層地包裝起來。1,person是被裝飾的物件,裝飾者模式的類圖中,所有的類都繼承自person類。person類有乙個show方法,用來展示person物件哪些服飾裝飾了。通過繼承,所有的類都有show方法,因此當人穿上了某種服飾之後,就可能呼叫該服飾的sho...
大話設計模式 裝飾者模式(總結)
1 裝飾者模式的一般應用場景 當系統增加新的功能,需要給類增加新的功能,而這些新的功能又主要是為了修飾原來類中的核心職責或者功能,也就是說,這些新的功能是用來修飾的,而且這些用來修飾的功能是在滿足某乙個特定情境下才會有需要執行的,這個時候就需要用到 裝飾者模式。2 裝飾者模式的構成 1 抽象構件 c...