裝飾模式就是動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。
需求:淨水器公司想要搞一波營銷活動,買送淨水機送三種禮品:雞蛋,雨傘,洗菜盆,但是銷售比較雞賊這三種禮品不是必須都送的,會根據消費者的購買意願來由銷售來送幾種禮品。
設計思路:實現抽象的gift類是原始物件,有givegift方法;salegift類是最核心的類,必須會執行也是需要裝飾的類;decorator類是裝飾的抽象類,giftdecorator1和giftdecorator2是具體的裝飾類。
類圖:
**實現:
/**
* 裝飾模式
* 禮品抽象類
*/public abstract class gift
/** * 銷售禮品
*/public class salegift extends gift
}/**
* 裝飾器模式
*裝飾抽象類
*/public abstract class decorator extends gift
@override
protected void givegift()
}/**
* 裝飾器模式
* 裝飾類1
*/public class giftdecorator1 extends decorator
//自己的裝飾方法
private void givesalfgift()
//重寫父類方法
protected void givegift()
}/**
* 裝飾器模式
* 裝飾類2
*/public class giftdecorator2 extends decorator
//自己的裝飾方法
private void givesalfgift()
//重寫父類方法
protected void givegift()
}/**
* 裝飾器模式
* 測試場景
*/public class testdecorator
}//執行結果
開始銷售淨水機*****===
只要下單就送雞蛋
購買意願的不夠強烈*****====
只要下單就送雞蛋
再送一把天堂傘
開始猶豫**********
只要下單就送雞蛋
再送一把天堂傘
再送一套不鏽鋼盆
最終銷售成功**********=
salegift類最終被裝飾了兩次,每次裝飾都是在原有的核心功能上加上了裝飾類特有的處理方法。而裝飾模式最根本的原理每次進行裝飾時傳入的構造方法的呼叫父類的構造方法進行初始化。而無論的裝飾類還是核心類都繼承gift的子類。所以裝飾模式其實時利用繼承的特性,而又豐富了繼承的一種手段。
裝飾模式是為了解決繼承關係過於複雜的場景,通過組合來代替繼承,增強原有類的功能,裝飾模式還可以通過多個裝飾器來裝飾,不過裝飾器類需要繼承和被裝飾類的相同的類或者介面。
參考《設計模式之禪》秦小波著
RC 和 Beta認識 我是乙個粉刷匠
軟體的生命週期中一般分4個版本,rc 和 beta分別是其中2種。如下是4種的解釋 beta版 公開測試版。是希臘字母的第二個,顧名思義,這個版本比alpha版發布得晚一些,主要是給 部落 使用者和忠實使用者測試用的,該版本任然存 在很多bug,但是相對alpha版要穩定一些。這個階段版本的軟體還會...
k8s之helm學習筆記 我是乙個粉刷匠
helm 是什麼 每個成功的軟體平台都有乙個優秀的打包系統,比如 debian ubuntu 的 apt,redhat centos 的 yum。而 helm 則是 kubernetes 上的包管理器。helm 的架構 helm 有兩個重要的概念 chart 和 release。chart 是建立乙...
k8s操作常見命令 我是乙個粉刷匠
建立測試kubectl run net test image alpine replicas 2 sleep 3600 檢視pod的情況kubectl get pod o wide 檢視某個pod的詳情kubectl describe pod pod name 先生成乙個nginx deployme...