設計模式 裝飾器模式

2021-10-03 06:52:04 字數 1422 閱讀 6329

參考:

1.什麼是裝飾器模式

2.裝飾器模式有什麼優勢

3.怎麼用裝飾器模式

定義:裝飾者顧名思義就是對乙個類新增一些額外的裝飾(功能)。我們想給乙個物件新增一些額外的功能又不改變物件內方法的簽名怎麼做呢?最常用的方法就是繼承了,子類繼承父類,然後重寫父類的方法。考慮一種情況,如我們要給父類中的show方法新增三個新功能功能a、功能b、功能c,這三種功能組合在一起時數目和執行順序不同,效果也是不同的,為了現實所有的功能,我們需要建立很多子類,如子類1的show方法:baseshow+功能a,子類2的show方法:baseshow+ab,子類3的show方法:baseshow+abc,子類4的show方法:baseshow+ba.....子類n的show方法:baseshow+功能cba(baseshow指的是父類原本的show方法),如果新增的功能組合太多使用繼承會造成子類**。裝飾器模式可以很好地解決這個問題。(舉個例子:給主功能加裝飾,例如你是乙個裸裝法師,你要三個槽,衣服,鞋子,帽子,若要列出則你需要8個子類(2*2*2),若使用裝飾器模式,則只需要3個裝飾器實現具體類就行)

**如下:

using system;

namespace decoratormodel

//裸裝法師

public class singleperson : basedecorator

}//裝飾器類

public class decorator : basedecorator

public override void show()

}//具體實現裝飾器類

public class singlepersonwithshoes : decorator

public override void show()

}//具體實現裝飾器類

public class singlepersonwithhit : decorator

public override void show()

}class program

}}

裝飾者模式的使用場景:

當我們需要動態新增類的功能同時不改變類的結構時可以使用裝飾者模式,裝飾類本質是乙個現有類的包裝。

裝飾者模式的優點:

1.乙個類需要新增一些功能,而這些功能按數目、順序組合形成的效果不一樣,如果用繼承會造成子類過多,裝飾者模式可以很好地解決這個問題;

2.使用裝飾者模式我們可以動態的新增/刪除類的功能,靈活性好。

裝飾者模式的缺點:

多層裝飾比較複雜,我們需要注意裝飾順序等因素。如先穿**再穿褲子,是正常人;而先穿褲子再穿**就是超人了。在開發中先過濾字串再加密,和先加密字串再過濾的效果是完全不同的。

設計模式 裝飾器模式

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

設計模式 裝飾器模式

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

設計模式 裝飾器模式

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