設計模式之裝飾者模式

2021-09-01 09:53:00 字數 1133 閱讀 1527

先來看乙個例子:

如果我們讀取檔案內容往往都會使用

bufferedinputstream bis = new bufferedinputstream(new fileinputstream(new file("c:\\a.txt"));

上大學的時候老師告訴我們這個叫流,在fileinputstream上面又套了乙個更大的管道,其實這是使用了裝飾者模式,在不改變底層**的情況下,給物件賦予新的功能。

現在通過乙個例項來展示裝飾者模式,我們知道coca-cola有多種飲品,比如cocacola和sprite,它們的包裝又分為大瓶、中瓶、小瓶,使用裝飾者模式就可以快速的知道拿在手上的飲品的種類和**。

public abstract class drinking

public abstract double cost();

}public class cocacola extends drinking

@override

public string getdescription()

}public class sprite extends drinking

@override

public string getdescription()

}public class bigbottle extends drinking

@override

public double cost()

public string getdescription()

}public class middlebottle extends drinking

@override

public double cost()

public string getdescription()

}public class normalbottle extends drinking

@override

public double cost()

public string getdescription()

}public class testmain

}

設計模式之 裝飾者模式

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

設計模式之裝飾者模式

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

設計模式之裝飾者模式

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