Java設計模式 裝飾者模

2021-08-13 19:41:45 字數 1686 閱讀 6449

裝飾者模式,其實不難理解,簡單地說就是裝飾者和被裝飾者擁有共同的超類,裝飾者只是豐富了行為,拓展了功能,而型別是不變的。說起來可能比較抽象,接下來通過乙個簡單的例子來實現乙個裝飾者模式。

動態的給乙個物件新增一些額外的職責或者功能,就增加功能來說,裝飾者模式相比生成子類更為靈活。

大多數情況下被裝飾者不需要操心自己具體要做什麼,交給裝飾者去裝飾就好了

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方法,以...