設計模式(七)裝飾模式

2021-07-26 14:51:28 字數 1635 閱讀 9403

裝飾模式介紹

裝飾模式是結構型設計模式之一,不必改變類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能,是繼承的替代方案之一。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

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

裝飾模式結構圖

裝飾模式在現實生活中有很多例子,比如給乙個人穿上各種衣服,給一幅畫塗色上框等等,這次我要舉得例子有些不同,舉乙個武俠修煉武功的例子:楊過本身就會全真劍法,有兩位武學前輩洪七公和歐陽鋒分別傳授楊過打狗棒法和**功,這樣楊過除了會全真劍法還會打狗棒法和**功。

抽象元件(component)

作為武俠肯定要會使用武功的,我們先定義乙個武俠的抽象類,裡面有使用武功的抽象方法:

public

abstract

class

swordsman

元件具體實現類(concretecomponent)

被裝飾的具體物件,在這裡就是被教授武學的具體的武俠,他就是楊過,楊過作為武俠當然也會武學,雖然不怎麼厲害:

public

class

yangguo

extends

swordsman

}

抽象裝飾者(decorator)

抽象裝飾者保持了乙個對抽象元件的引用,方便呼叫被裝飾物件中的方法。在這個例子中就是武學前輩要持有武俠的引用,方便教授他武學並「融會貫通」:

public

abstract

class

master

extends

swordsman

@override

public

void attackmagic()

}

裝飾者具體實現類(concretedecorator)

這個例子中用兩個裝飾者具體實現類,分別是洪七公和歐陽鋒,他們負責來傳授楊過新的武功:

public

class

hongqigong

extends

master

public

void teachattackmagic()

@override

public

void attackmagic()

}

public

class

ouyangfeng

extends

master

public

void teachattackmagic()

@override

public

void attackmagic()

}

客戶端呼叫

經過洪七公和歐陽鋒的教導,楊過除了初始武學全真劍法又學會了打狗棒法和**功:

public

class client

}

優點

缺點使用場景

設計模式《七》 裝飾模式

顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項。component 抽象介面,可以給這些物件動態地增加職責。concretecomponent component的具體物件,也可以對這個物件新增一下職責。decor...

簡述設計模式(七) 裝飾模式

在軟體開發過程中,當對系統擴充套件功能時,希望復用當前系統中已存在現存元件,並對其進行動態擴充套件以實現新功能。此時,在不修改現存元件的情況下,同時對這些元件進行復用擴充套件。舉個例子,手機本身具備照相功能,但畫質感人,愛美的人都希望在拍照的同時具有美化效果,因此,擴充套件出濾鏡 瘦臉等功能。針對這...

JavaScript設計模式七 裝飾者模式

裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用於包裝同介面的物件,用於通過過載方法的形式新增新功能,該模式可以在被裝飾者的前面或後面加上自己的行為以達到特定的目的。簡單的理解 給物件動態新增職責的方式稱為裝飾著模式。舉乙個簡單的例子 var xiaoming function this.eat f...