裝飾類? 應該是在說 Decorator 吧?
什麼是裝飾設計模式: 當想要對已有的對象進行功能增強時, 可以定義類,將已有對像傳入,基於已有的功能,並提供加強功能。 那麼自定義的該類稱為裝飾類。 裝飾類通常會通過構造方法接收被裝飾的對象。 並基於被裝飾的對象的功能,提供更強的功能。
如一個簡單的demo 人吃飯,剛開始人窮只是普通的吃飯後來人生活好了吃飯就不一樣了增強了吃飯的功能雖然例子不是恰當能說明問題就行 看代碼: Java代碼
class Person { public void chiFan(){
System.out.println("吃飯"); } }
class SuperPerson { private Person p; public SuperPerson(Person p){
this.p=p; }
public void superChiFan(){
System.out.println("開胃酒"); p.chiFan();
System.out.println("咖啡"); }
} public class PersonDemo { public static void main(String args[]){ Person p=new Person();
SuperPerson sp= new SuperPerson(p);
sp.superChiFan(); }
} 以上只是簡單說明一下,在JAVA IO中用了很多增強如:FileRead中read()方法只是一個一個字節去讀,為了讀得更快在BufferedReader就增強了read()方法而產生了reandLine()一行一行的去讀
有人說沒必要那麼麻煩:你只要拿superPerson繼承person 在覆寫person的chiFan()方法不就行了? 裝飾是構造函數參數傳遞進行增強 如果為了某個功能而產生子類(繼承)那麼那個體係是非常臃腫的
例如:你有個對像有個功能是在N年前建立的,如今你覺得功能不夠用了寫個類把對像傳進來就可以解決問題瞭如果這個功能寫錯了我就把自己寫的功能去掉又不影響以前的功能靈活性相當強的。
裝飾模式比繼承要靈活。避免了繼承體系臃腫。 而且降低了類於類之間的關係。 裝飾類因為增強已有對象,具備的功能和已有的是相同的,只不過提供了更強功能。 所以裝飾類和被裝飾類通常是都屬於一個體系中的。 |