裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。
動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。
大多數情況下被裝飾者不需要操心自己具體要做什麼,交給裝飾者去裝飾就好了
component:抽象元件,可以是乙個介面或抽象類,其充當的就是被裝飾的原始物件
concretecomponent:元件的具體實現類,我們裝飾的具體物件
decorator:抽象裝飾者,其職責就是為了裝飾我們的元件物件,其內部一定要有乙個指向元件物件的引用(可以呼叫被裝飾者方法的同生死,不破壞被裝飾者的層次結構而增加一些功能)。如果裝飾邏輯單一,我們可以省略該類直接作為具體的裝飾者。
concretedecoratora/b:裝飾者的具體實現
需要透明且動態的拓展類的功能。
首先定義乙個被裝飾者component:閒人,乙個無所事事的人
/**
* 閒人 無所事事
*/public abstract class idlers
然後定義乙個裝飾者:decorator
/**
* 裝飾者
*/public abstract class decorator extends idlers
@override
public void walk()
}
接下來,定義乙個被裝飾者:人
/**
* 被裝飾者
*/public class person extends idlers
}
最後,來定義三中不同的裝飾者,分別為:男人、女人、小孩子:
public class man extends decorator
@override
public void walk()
private void walktointernetbar()
}
public class woman extends decorator
@override
public void walk()
private void walktomarket()
}
public class child extends decorator
@override
public void walk()
private void walktotoycity()
}
**就這些,接下來執行一下:
public static void main(string args)
看一下輸出的log:
這樣就一目了然了,被裝飾者person不用操心自己具體要做什麼,只需要知道「我今天很閒,我要去某個地方消遣娛樂一下」,而這「某個地方」,不同的人肯定有不同的去處,交給裝飾者(男人女人小孩子)去豐富細節就好了。
Java 裝飾者設計模式
1 首先定義乙個介面 public inte ce worker 2 定義乙個木匠類 public class carpenter implements worker 3 定義乙個水管工類 public class plumber implements worker 4 這兒是關鍵,定義乙個裝飾者類...
Java設計模式 裝飾者模式
動態的將責任附加到物件上,想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇 這種比繼承更加靈活機動的特性,也同時意味著更加多的複雜性。裝飾模式會導致設計中出現許多小類,如果過度使用,會使程式變得很複雜。例 package com.cn.gaoyan 公共抽象介面 public abstract c...
Java設計模式 裝飾者模式
愉快的工作又開始了。leader安排了乙個新的任務,給乙個酸奶店的點單軟體增加新的功能。這個程式的原來所有的酸奶都繼承於乳酪類 cheese public abstract class cheese public abstract intprice 所有具體的酸奶繼承乳酪類並重寫 price方法,以...