設計模式之裝飾器模式

2022-04-06 02:31:45 字數 1886 閱讀 2013

裝飾器顧名思義就是對原有物件進行包裝,在包裝後的物件上呼叫行為。主要目的是讓我們的設計符合單一職責盡可能的讓乙個類只包含一種職責,做到職責明確。符合這樣的solid原則我們才能易於擴充套件使程式具有更好的擴充套件性。裝飾器模式就是用來擴充套件已有類,被包裝類和包裝類首先都是實現同一介面。

以下面乙個介面(icomponent)和兩個類為例(component和decoratedcomponent):

原理:component實現了icomponent,decoratedcomponent用來作為擴充套件類。在decoratedcomponent的建構函式中接受乙個icomponent型別引數,客戶端呼叫時,用component作為引數來實現介面。這樣客戶端既可以呼叫到原有類component的行為方法,也可以呼叫到擴充套件類decoratedcomponent的行為方法。

icomponent:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

decoratorpattern

813 }

component:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

decoratorpattern815

}16 }

decoratedcomponent:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

decoratorpattern817

18public

void

dosomething()

1923

24public

void

dosomethingelse()

2528

}29 }

//客戶端呼叫

1using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

decoratorpattern819

}20 }

之前也寫過一篇關於**模式的隨筆,lz覺得有異曲同工之處都是為了擴充套件行為,裝飾器模式關注於在乙個物件上動態的新增方法,然而**模式關注於控制對物件的訪問。換句話 說,用**模式,**類(proxy class)可以對它的客戶隱藏乙個物件的具體資訊。因此,當使用**模式的時候,我們常常在乙個**類中建立乙個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為乙個引數傳給裝飾者的構造器。

設計模式之裝飾器模式

定義 decorator裝飾器,顧名思義,就是動態地給乙個物件新增一些額外的職責,就好比為房子進行裝修一樣。因此,裝飾器模式具有如下的特徵 它必須具有乙個裝飾的物件。它必須擁有與被裝飾物件相同的介面。它可以給被裝飾物件新增額外的功能。用一句話總結就是 保持介面,增強效能。裝飾器通過包裝乙個裝飾物件來...

設計模式之裝飾器模式

什麼是裝飾器模式 decorator 裝飾器模式的優點 裝飾器模式的缺點 示例 package com.pattern.decorator 抽象類,裝飾器的父類 author yjzhou public abstract class decorator implements component ov...

設計模式之裝飾器模式

裝飾模式 decorator 顧名思義,裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,關係圖如下 source類是被裝飾類,decorator類是乙個裝飾類,可以為source類動態的新增一些功能,如下 1.public ...