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

2021-10-05 19:39:40 字數 2013 閱讀 3378

在軟體開發過程中,當對系統擴充套件功能時,希望復用當前系統中已存在現存元件,並對其進行動態擴充套件以實現新功能。此時,在不修改現存元件的情況下,同時對這些元件進行復用擴充套件。

舉個例子,手機本身具備照相功能,但畫質感人,愛美的人都希望在拍照的同時具有美化效果,因此,擴充套件出濾鏡、瘦臉等功能。針對這個例子,來看看是否採用裝飾模式的方式之間的區別:

不採用裝飾模式;

重複建立類,會導致類**;

如果希望其它元件(如相機)也具備擴充套件功能,也需要重新建立類;

採用裝飾模式;

現在我們了解了如何復用現存元件進行擴充套件的方式,對裝飾模式應該有一定的了解。

裝飾模式:指在不改變現有物件結構的情況下,動態地給該物件新增額外職責的模式。下面是裝飾模式的uml類圖:

裝飾模式主要包含以下角色:

抽象構件(component):抽象介面,定義規範用於接收擴充套件功能的物件;

具體構件(componenta):實現抽象構件,通過裝飾角色新增額外功能;

抽象裝飾角色(decorator):繼承抽象構件,包含具體構件例項;

具體裝飾角色(decoratora):繼承抽象裝飾,為具體構件新增額外功能;

裝飾模式中,具體構件物件和裝飾物件共同實現同一介面,同時使用組合關係,裝飾角色物件包裹具體構件物件,並在保持具體構件物件的類結構不變的前提下,擴充套件額外的功能。

根據上述手機拍照功能的例子,進行**實現。

public

inte***ce

product

public

class

phone

implements

product

}

public

abstract

class

abstractfunction

implements

product

@override

public

void

photograph()

}

public

class

filterfunction

extends

abstractfunction

@override

public

void

photograph()

public

void

filter()

}public

class

thinfunction

extends

abstractfunction

@override

public

void

photograph()

public

void

thin()

}

public

class

decoratortest

}

給現有類新增附加功能,而且不能採用生成子類的方式進行擴充套件的情況;

當需要擴充套件一組功能進行排列組合,而導致產生很多實現類時,使用繼承關係很難實現,就可以考慮使用裝飾模式;

當物件的功能要求可以動態新增、撤銷的情況;

裝飾模式(裝飾設計模式)詳解

設計模式(七)裝飾模式

裝飾模式介紹 裝飾模式是結構型設計模式之一,不必改變類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能,是繼承的替代方案之一。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。定義動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。裝飾模式結構圖 裝飾模式在現實生...

設計模式《七》 裝飾模式

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

JavaScript設計模式七 裝飾者模式

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