設計模式之裝飾者模式

2022-01-09 23:27:02 字數 1627 閱讀 1022

一、定義

在不改變原有物件的基礎之上,將功能附加到物件上,也就是說是繼承的補充,介面與介面之前是有層次關係的。

也就是說新增功能需要建立另外乙個物件,此物件功能實現需要依賴原有物件的功能。

二、例項

還在讀大學的時候,每次從健身房出來就會買乙個炒粉,有時會加乙個雞蛋,有時會加一根香腸,加上小公尺辣,別提多想了,懷念!

此時炒粉就是乙個架構,雞蛋、香腸、小公尺辣等只是在炒粉的基礎上進行修飾。那麼炒粉就是被修飾者,雞蛋等就是修飾者。

炒粉:

1、炒粉的抽象物件

public abstract class abstractfirenoodle     

**  

public int price()

}2、實際的炒粉物件 

public class firenoodle extends abstractfirenoodle     

@override    

public int price()

}

裝飾者類:

1、雞蛋裝飾者,繼承了抽象炒粉類

public class eggdecorator extends abstractfirenoodle    

3、在炒粉描述的基礎上去新增描述    

@override  

public string desc()     

4、在炒粉**的基礎上去增加

@override    

public int price()

}

從上述**可知,裝飾者類都是基於被裝飾者類的功能上進行改造,裝飾者和被裝飾者是有層次關係的。

測試類:

abstractfirenoodle abstractfirenoodle =  new firenoodle();

abstractfirenoodle = new eggdecorator(abstractfirenoodle);

abstractfirenoodle = new eggdecorator(abstractfirenoodle);

system.out.println(abstractfirenoodle.desc());

system.out.println(abstractfirenoodle.price());

結果:

下面是幾個類的類圖

三、原始碼例項

filterinputstream和inputstream

filterinputstream的方法基本都是基於inputstream的,例如read方法。

也就是說io裡面涉及到的設計模式有裝飾者模式。

我是liusy,乙個喜歡健身的程式設計師。

來都來了,關注一波再溜唄。

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...