設計模式 裝飾者模式

2021-10-01 20:43:03 字數 1712 閱讀 9408

通過乙個例子來實現裝飾者。

我們去4s店買車,大家都知道買車過程中會有各種裝飾是另加錢的。比方說起亞k3基礎價100000,加乙個倒車影像1000,加乙個中控屏1200,那麼總**是102200。那麼我們就按照裝飾者模式來實現此邏輯。

首先實現乙個介面car,用於描述所有的汽車類資訊

/// /// 建立乙個虛擬汽車介面

///

public inte***ce car

4s店會售賣各種汽車,比如說起亞4s店會買k3/k5/k4/k2等,我們就以起亞k3/k5具體汽車類來描述具體的汽車型號。

/// /// 汽車具體類,起亞k3

///

public class qyk3:car

public double getpricecost()

}/// /// 汽車具體類,起亞k5

///

public class qyk5:car

public double getpricecost()

}

上面只描述了基礎的汽車**,但是加裝裝飾是沒有描述的,我們也增加乙個裝飾描述類

/// /// 汽車裝飾類,用於描述整車裝飾

///

public class cardesc : car

public virtual double getpricecost()

}

然後倒車影像/中控屏重寫其中的描述資訊和**資訊。可以看到我們的具體裝飾類中也是依賴了介面,遵循面向介面程式設計,而不是面向實現程式設計。

/// /// 裝飾具體類,倒車影像

///

public class daocheyingxiang:cardesc

public override string getdescription()

public override double getpricecost()

}/// /// 汽車裝飾類,中控屏

///

public class zhongkongping:cardesc

public override string getdescription()

public override double getpricecost()

}

測試

static void main(string args)

public static void print(car car)

輸出結果

起亞k3,增加中控屏,**是:101000

起亞k3,增加中控屏,增加倒車影像,**是:102200

類圖如下

裝飾者模式的優點:

1、允許行為能夠動態擴充套件,而無須修改現有**

2、組合和委託可用於在執行時動態地增加上新的行為。

3、裝飾者類可以反映出被裝飾的元件型別

4、裝飾者可以在被裝飾者的行為前/後增加上自己特定的行為,甚至將被裝飾者的行為整個取代掉,而達到特定的目的。

5、裝飾者是透明的

缺點:1、裝飾者會導致設計**現許多小物件,導致程式變的複雜。

設計模式 裝飾者模式

public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...

設計模式 裝飾者模式

沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...

設計模式 裝飾者模式

好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。模式,包含以下四個角色 1 抽象構件 component 角色 給出乙個抽象介面,以規範準備接收附加責任的物件。2 具體構件 concretecomponent 角色 定義乙個將要接收附...