設計模式 裝飾器模式

2021-10-06 20:20:33 字數 3314 閱讀 6682

上文(設計模式-組合模式):

現代人每個人基本都會有一部手機,有的有好幾部,正常情況下買手機有很多**,比如裸機、裸機+貼膜、裸機+貼膜+手機殼等,但是不一定每個人在購買的時候都一定會貼膜,所以個性化需求就出來了,所以這個貼膜,總不能一出廠就有了,一般後續服務中增加的,屬於裝飾品,而裝飾器模式就解決該問題。

定義:裝飾器動態給乙個物件新增一些額外的功能/職責,裝飾模式比生成子類更為靈活。 抽象構件(component)角色 :用來規範被裝飾的物件,一般為統一介面輸出。 具體構件(concretecomponent )角色 :被裝飾的類,本身也是具備功能類。 裝飾(decorator)角色 :持有乙個構件物件的例項。並定義乙個跟抽象構件一致的介面。 具體 (concretedecorator ) 裝飾角色 :負責給具體構件新增附加職責的類。在實際使用中多數情況下裝飾角色和具體裝飾角色可能由乙個類來承擔。 其實也就是給你手機加些裝飾器,而這些裝飾器可有可無,根據你的選對來的,貼不貼膜,要不要手機殼,非原廠出廠就有。
對原有的物件或者功能動態增加功能/職責,很好的起到乙個動態增刪。並且**不會浸入性低,新增的功能增減不會影響原來的功能;

就比如一部手機買到手是裸機,新貼上膜和手機殼,不會影響這個手機的使用,並且這個殼和膜不想用不會影響手機的功能。

**易讀:使用裝飾器模式**簡單易讀,業務邏輯清晰;

拓展性強:功能動態增刪影響低;

減少耦合,低侵入:由於解決了傳統的繼承或者說在原來的物件去增加功能減少了很大的耦合和侵入性也很少;

多層裝飾導致系統複雜:因為如果裝飾器可以有好多層所以會導致系統過於複雜,所以建議不要過於複雜的裝飾。

/**

* @auther: csh

* @date: 2020/5/28 18:02

* @description:抽象的手機

*/public

inte***ce

iphone

/**

* @auther: csh

* @date: 2020/5/28 18:06

* @description:小公尺手機

*/public

class

xmphone

implements

iphone

@override

public

void

internet

(int newwork)

@override

public

void

printfunction()

/**

* @auther: csh

* @date: 2020/5/28 18:05

* @description:華為手機

*/public

class

hwphone

implements

iphone

@override

public

void

internet

(int newwork)

@override

public

void

printfunction()

}

/**

* @auther: csh

* @date: 2020/5/28 18:07

* @description:抽象的修飾器

*/public

abstract

class

iphonedecorator

implements

iphone

@override

public

void

printfunction()

}

/**

* @auther: csh

* @date: 2020/5/28 18:10

* @description:手機殼裝飾器

*/public

class

phoneshelldecorator

extends

iphonedecorator

@override

public

void

callup

(string number)

@override

public

void

internet

(int newwork)

@override

public

void

printfunction()

private

void

setshell()

}

/**

* @auther: csh

* @date: 2020/5/28 18:10

* @description:

*/public

class

phonefilmdecorator

extends

iphonedecorator

@override

public

void

callup

(string number)

@override

public

void

internet

(int newwork)

@override

public

void

printfunction()

private

void

setfilm()

}

/**

* @auther: csh

* @date: 2020/5/28 18:16

* @description:案例

*/public

class

client

}

華為手機有手**和上網功能

華為手機有手**和上網功能

貼了膜小公尺手機有手**和上網功能

加裝了手機殼

裝飾器在日常開發過程中應用廣泛,比如類似這種需求迭代比較快,而又不確定這個屬性/方法是否以後會一直保留,在這種不確定性的場景下裝飾器再適合不過了。或者說原來的功能已很穩定不想影響到原來的功能,並且該功能只是個性化給某個需求專用,那就建議使用。

設計模式 裝飾器模式

裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...

設計模式 裝飾器模式

裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...

設計模式 裝飾器模式

定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...