簡單的裝飾者模式

2021-10-03 03:16:25 字數 2945 閱讀 6003

裝飾者模式主要用來擴充套件功能的,不會改變原來物件的功能,只做擴充套件

版本一:

**如下:

public abstract class beefnoodle
public class basebeefnoodle extends beefnoodle 

public int getprice()

}

public class eggdecorator extends beefnoodle 

//增強的功能(基於真實物件上)

protected string getmsg()

//增強的功能(基於真實物件上)

protected int getprice()

}

private beefnoodle beefnoodle;

public sausagedecorator(beefnoodle beefnoodle)

protected string getmsg()

protected int getprice()

測試**:

public class mytest 

}

效果如下:

版本二:

①根據策略模式獲取對應的策略物件

②計算**用具體的某乙個裝飾者物件去計算,因為會需要面的基本資訊,所以作為構造引數傳進來(代表這個物件是被增強的目標),此外各個裝飾者物件還擴充套件了自己的功能,比如 混合了雞蛋和香腸的類,方法就有三個引數(代表碗數量,雞蛋數量,烤腸數量)

類圖:

**如下:

public abstract class beefnoodle
public class basebeefnoodle extends beefnoodle 

//amount 牛肉麵數量

public int getprice(integer amount)

}

public class eggdecorator extends beefnoodle 

protected string getmsg(integer eggs)

protected int getprice(integer eggs)

protected string getmsg(integer noodles,integer eggs)

protected int getprice(integer noodles ,integer eggs)

}

public class sausagedecorator extends beefnoodle 

protected string getmsg(integer sausages)

protected int getprice(integer sausages)

protected string getmsg(integer noodles ,integer sausages)

protected int getprice(integer noodles ,integer sausages)

}

public class eggsandsausagedecorator extends beefnoodle 

protected string getmsg(integer sausages)

protected int getprice(integer sausages)

protected string getmsg(integer noodles ,integer eggs,integer sausages)

protected int getprice(integer noodles,integer eggs,integer sausages)

// 策略模式,獲得不同的策略物件,具體的計算方式是在各個策略物件(裝飾者物件)實現的

public class strategy

public static beefnoodle get(string noodlekey)

return noodlestrategy.get(noodlekey);

}}測試類:

public class mytest 

}

測試結果:

只來一碗牛肉麵牛肉麵 * 1**為:5

只來兩碗牛肉麵牛肉麵 * 2**為:10

只來一碗牛肉麵加乙個雞蛋  牛肉麵 * 1加1個雞蛋**為:6

只來一碗牛肉麵加兩個雞蛋  牛肉麵 * 1加2個雞蛋**為:7

只來兩碗碗牛肉麵加兩個雞蛋  牛肉麵 * 2加2個雞蛋**為:12

只來一碗牛肉麵加乙個香腸  牛肉麵 * 1加1根香腸**為:6

只來一碗牛肉麵加兩個香腸  牛肉麵 * 2加2根香腸**為:7

只來兩碗碗牛肉麵共加兩個香腸  牛肉麵 * 2加2根香腸**為:12

只來一碗牛肉麵加乙個雞蛋乙個香腸  牛肉麵 * 1加1個雞蛋加1根香腸**為:8

只來一碗牛肉麵加兩個雞蛋兩個香腸  牛肉麵 * 2加2個雞蛋加2根香腸**為:17

只來兩碗碗牛肉麵各加兩個雞蛋兩個香腸  牛肉麵 * 4加4個雞蛋加4根香腸**為:22

裝飾者模式簡單理解

裝飾者模式簡單理解 1.定義 增強乙個類的功能,還可以讓裝飾者類之間互相裝飾 2.步驟 1 裝飾者類中需要維護乙個被裝飾者類的引用 2 讓裝飾者類有乙個共同的父類,或者父介面 eq 例項 裝飾者類與繼承的區別 繼承實現的增強類 優點 結構清晰,而且實現簡單 缺點 對於每乙個的需要增強的類都要建立具體...

裝飾者設計模式的簡單了解

本篇供個人學習使用,有問題歡迎討論 decorator pattern,能夠在不修改目標類也不使用繼承的情況下,動態地擴充套件乙個類的功能。它是通過建立乙個包裝物件,也就是裝飾者來達到增強目標類的目的的。裝飾者設計模式的實現有兩個要求 這兩個要求的目的是,在裝飾者類中的方法可以呼叫目標類的方法,以增...

裝飾者模式及其簡單例項

咖啡店裡咖啡中可以加不同的配料 摩卡 牛奶 糖 奶泡 不同的飲品加上不同的配料有不同的價錢,怎樣實現呢?可能你的第一印象會想到使用繼承,1.首先定義乙個咖啡基類 2.對於加糖的,加牛奶的,加摩卡的 加奶泡的,分別寫乙個子類繼承 3.對於加糖,又加奶的寫乙個類,對於對於加糖,又摩卡的寫乙個類,對於對於...