裝飾器模式:動態地將責任附加到物件上,允許使用者向現有物件新增新功能而不改變其結構。若要擴充套件功能,裝飾器提供了比繼承更有彈性的替代方案。
場景:假如有這樣乙個抽象裝備類
packagepattern.decorator;
public
abstract
class
equipment
//獲取戰鬥力
public
abstract
intgetpower();
}
然後實現乙個**類繼承上面的裝備類
packagepattern.decorator;
public
class weapon extends
equipment
@override
public
intgetpower()
}
一段時間後,裝備增加了高階,時裝,強化等功能,這些功能都可以提公升戰鬥力,現在希望計算提公升後的戰鬥力。
先不管其他方法是怎麼實現這個需求的,讓我們來看看裝飾器模式是怎麼設計的,並且不會改變上面的weapon類。
首先,設計乙個裝備的裝飾器抽象類
packagepattern.decorator;
public
abstract
class decorator extends
equipment
然後實現強化,高階,時裝的裝飾類
強化(強化一次戰力提公升1000):
packagepattern.decorator;
public
class strengthdecorator extends
decorator
@override
public
string getdesc()
@override
public
intgetpower()
}
高階(高階一次戰力提公升2000):
packagepattern.decorator;
public
class advancedecorator extends
decorator
@override
public
string getdesc()
@override
public
intgetpower()
}
時裝(根據不同的時裝提公升戰力):
packagepattern.decorator;
public
class factiondecorator extends
decorator
else
}@override
public
string getdesc()
@override
public
intgetpower()
}
最後實現個測試類看看裝飾器模式是怎麼運作的
package pattern.decorator;public class showcontroller
}
執行結果:
屠龍寶刀,戰力:1000000
高階了10次,屠龍寶刀,戰力:1020000
春節時裝,高階了10次,屠龍寶刀,戰力:1025000
強化了15次,春節時裝,高階了10次,屠龍寶刀,戰力:1040000
PYTHON裝飾器初探
python裝飾器的執行過程 在函式定義時,裝飾器就已經執行了 在呼叫裝飾器修飾的原函式的時候,此時執行的是裝飾器裡的函式 例子 控制台輸入 def log text print print one defdecorator func print print oneone def args,kw f...
初探Java裝飾者模式和繼承模式
created by al wl228081 on 2017 8 10.定義人類 public class persondemo public static class person public static class newperson void chifan public static cl...
裝飾器模式
大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...