java之裝飾模式

2021-09-10 08:21:24 字數 1838 閱讀 8744

但是也有缺點:產生很多小物件佔據記憶體,影響效能容易出錯,除錯麻煩。

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

主要解決:一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹。

何時使用:在不想增加很多子類的情況下擴充套件類。

如何解決:將具體功能職責劃分,同時繼承裝飾者模式。

使用場景: 1、擴充套件乙個類的功能。 2、動態增加功能,動態撤銷。

注意事項:可代替繼承。

人類都有吃的行為,吃不同的食物可能讓你有不同的感覺.在本例中,我們模擬吃不同的食物讓其產生不同的效果.同時也可多種食物疊加.讓其產生多種效果

1.定義乙個human介面,

定義human人類介面,它具有吃的行為功能

public

inte***ce

human

2.定義被裝飾者,黃種人yellowpeople

定義乙個具體的人種,黃種人yellowpeople 類

public

class

yellowpeople

implements

human

}

3.定義裝飾者的抽象父類

抽象父類有乙個建構函式,建構函式裡面的引數是抽象的人類,這也是能夠實現裝飾功能的乙個必不可少的步驟。

public

abstract

class

abstractfood

implements

human

@override

public

void

eat(

)}

4.定義具體的裝飾物

public

class

meat

extends

abstractfood

@override

public

void

eat(

)public

void

show()

}

public

class

noodles

extends

abstractfood

@override

public

void

eat(

)public

void

show()

}

大公尺

public

class

rice

extends

abstractfood

@override

public

void

eat(

)public

void

show()

}

5.測試類
public

class

test

}

執行結果:

我需要吃東西才有能量…

這是一碗肉,吃下去,有力氣去搬磚了

這是大公尺,吃下去可以去敲**了

這是一碗面,吃完可以好好睡一覺了

Java設計模式之裝飾模式

裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾模式的特點 1 裝飾物件和真實物件有相同的介面。這樣客戶端物件就可以以和真實物件相同的方式和裝飾物件互動。2 裝飾物件包含乙個真實物件的索引 reference 3...

Java設計模式之裝飾模式

動態的給乙個物件新增一些額外的職責.就增加功能來說,裝飾模式相比生成子類更為靈活.需要透明且動態的擴充套件類的功能時.其中涉及到的角色有 這裡模擬一下人穿衣服的場景,沒錢的穿便宜衣服,有錢的穿貴衣服 首先定義人的抽象類 public abstract class person public clas...

設計模式之裝飾模式 Java

23種設計模式之一,英文叫decorator pattern,又叫裝飾者模式。裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。component是定義乙個物件介面,可以給這些物件動態新增職責,concretecomp...