Java23種設計模式之裝飾者模式

2021-09-10 05:38:24 字數 2767 閱讀 2021

描述:動態的給物件新增一些額外的屬性或行為。相比於使用繼承,裝飾者模式更加靈活。也就是如果想對已經存在的物件進行裝飾,那麼就定義乙個類,在類中對已經有的物件進行功能的增強或新增另外的行為,這個類就叫裝飾者類,被修飾的類叫被裝飾者類,是已經存在有的功能。在裝飾者類之間又可以互相裝飾。

要實現裝飾者模式,需要了解以下幾點內容:

裝飾者類要實現真實類同樣的介面;

裝飾者類內有乙個真實物件的引用;

裝飾類物件在主類中接收請求,將請求傳送給真實的物件;

裝飾者可以在傳入真實物件後,增加一些額外的功能。

舉例來說明裝飾者模式:比如乙個程式猿去要去相親,那他相親前會做些什麼工作呢?肯定會把自己給好好打扮下,讓日常糟蹋的自己變得帥點哈。若我們在不了解裝飾者前,我們的程式會怎麼設計呢?

第一步,我們會先定義乙個具有介紹自己和打扮自己的介面:

public inte***ce person
第二步,定義乙個具體的實現類:

/**

* 定義乙個具體的物件:程式設計師

* */

public class programmer implements person

@override

public void introduce()

@override

public void dress()

private void wearsuit()

private void weartie()

private void wearleathershoes()

}

程式猿剛到車站,發現自己忘記穿襯衣了,咋辦?只能再回去穿咯。接著我們會在程式設計師類中,再加乙個穿襯衣的方法,再在打扮的方法中把這個方法給實現,仔細想想這樣的邏輯有問題麼?想來想去,發現**設計上不符合開閉原則。那我們了解了裝飾者模式後,我們又會怎麼去設計我們的程式呢?

第一步,我們會先定義乙個具有介紹自己和打扮自己的介面:

public inte***ce person
第二步,定義乙個具體的實現類(被裝飾者):

/**

* 定義乙個具體的物件:程式設計師

* */

public class programmer implements person

@override

public void introduce()

@override

public void dress()

}

第三步,定義乙個裝飾類:

/**

* 定義乙個裝飾類:服裝類

* uml圖中的decorator

* */

public class finerydecorator implements person

@override

public void dress()

}

第四步,定義具體的裝飾類: 

/**

* 定義西裝裝飾類

* */

public class suitdecorator extends finerydecorator

@override

public void introduce()

@override

public void dress()

private void wearsuit()

}/**

* 定義領帶裝飾類

* */

public class tiedecorator extends finerydecorator

@override

public void introduce()

@override

public void dress()

private void weartie()

}/**

* 定義皮鞋裝飾類

* */

public class leathershoesdecorator extends finerydecorator

@override

public void introduce()

@override

public void dress()

private void wearleathershoes()

}

第五步,客戶端呼叫:

public class client 

}出門前,小張開始打扮自己

穿上西裝

穿上皮鞋

系上領帶

突然有一天,這個程式猿不知道犯了啥毛病,非要先繫領帶,再穿西裝,最後穿鞋,而我們只需在客戶端調整下類的執行順序就行了,無需再去修改其它類的內部結構了。可見,裝飾者模式可以非常靈活地給被裝飾者增加一些新的功能。

總結:裝飾者和被裝飾者具有相同的父型別,則在任何需要原始物件(被裝飾者)的場合,都可以用裝飾過得物件代替原始物件。

可以用乙個或多個裝飾者包裝乙個物件(被裝飾者)

裝飾者可以在所委託裝飾者行為之前或之後加上一些其他的行為,以達到特定的目的

被裝飾者可以在任何時候被裝飾

裝飾類多了,功能相似,出了問題的時候,排錯花的時間就長了

java23種設計模式之建造者模式

上一節說到抽象工廠模式 所謂的抽象工廠模式,就是在同乙個工廠中可以生產出同一種型別或者同一系列的多種產品。今天說說工廠模式中另一種型別 建造者模式 顧名思義,建造者模式是想構建出乙個針對於某種或者一些產品的建造者,通過這個建造者來完成這種產品的從開始到結束的全部生產過程,最後得到成品。比如,前面我們...

Java23種設計模式

定義 設計模式 design pattern 是一套反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易被他人理解 保證 可靠性。單例模式,特點 全域性只有乙個例項。定義 單例模式,也叫單子模式,是一種常用的軟體設計模式。在應用這個模式的時候,單例物件的類必須...

Java23種設計模式

建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模 式 狀態模式 訪問者模式 中...