設計模式之二(decorator pattern)

2021-07-03 04:31:19 字數 1187 閱讀 9236

每次從海淀黃莊坐地鐵都會經過乙個賣煎餅的小店。

乙個標準煎餅(7塊錢):乙個雞蛋+一片菜葉子+脆餅 

有個靈活的地方是,可以加自己喜歡的材料,比如,加乙個雞蛋,需要多付1塊錢。

加乙個雞排需要多加4塊錢。

作為kb的it民工,就像能不能設計乙個系統來自動計算煎餅的系統。

剛開始設計的時候,設計方案如下: 先設計乙個標準煎餅類,然後不同口味的繼承標準類別。

然而,一天排隊買煎餅的時候,前排一美女說要點3蛋煎餅。

如何擴充套件現有的類? 如果來個8蛋煎餅+4個雞排呢?

在一籌莫展的時候,翻了一下設計模式,很欣喜的發現有decorator pattern 可以解決如下問題, 其定義如下(來自wikipedia):

修飾模式

,是物件導向程式設計

領域中,一種動態地往乙個類中新增新的行為的

設計模式

。就功能而言,修飾模式相比生成

子類更為靈活,這樣可以給某個物件而不是整個類新增一些功能。

主要目標是對每個物件加一點修飾。

例如:我們要乙個雙蛋+雞排煎餅,分解開來:標準煎餅+乙個蛋+雞排。我們所需要做的是建立乙個標準煎餅物件,然後點綴乙個雞蛋和乙個雞排,就可以了。

c#模擬如下:

public inte***ce chinesepancake

/// /// including an egg

///

public class stardandchinesepancake : chinesepancake

public double cost()

}public class egg : chinesepancake

public string description()

public double cost()

}public class chickensteak : chinesepancake

public string description()

public double cost()

}

測試例子:

static void main(string args)

輸出如下: vanilla chinese pancake, add egg, chicken steak: 12

Decorator設計模式

雖然設計模式分得太細會有過度的趨勢,decorator某種程度上也是一種facade模式。但是實現起來還是比較漂亮的。而後面那個人的class arlist list,ilist的方法就不是decorator。它沒有乙個內部的list。這樣 however,now all of list s met...

設計模式 decorator模式

裝飾者模式體現了 敏捷開發思想中的 對類要 開放擴充套件,關閉修改.例子 乙個person主類 若干裝飾品類 紅衣服,藍衣服,藍鞋子,紅鞋子 測試 new乙個person 給他穿上紅衣服藍鞋子 code person介面 public inte ce ipersonperson類 package c...

設計模式 decorator模式

兩點 目的 在不改變被裝飾類功能的前提下增加新功能 特點 繼承是子類和父類強耦合,橋接是低耦合 例子 class print 抽象介面 virtual int getcolumns virtual int getrows virtual string getrowcontent int row el...