裝飾者模式
来源:互联网 发布:vb.net 使用资源文件 编辑:程序博客网 时间:2024/06/08 14:27
OO原則:
對擴展開放,對修改關閉
OO模式:
裝飾者模式(Decorate),動態的將責任附加到對象上。想要擴展功能,裝飾著模式提供有別于繼承的另一種選擇
類結構圖:
星巴茲咖啡
1.Beverage飲料虛基類
/// <summary>/// Beverage 飲料虛基類/// </summary>public abstract class Beverage{ protected string description = "Unknown Beverage"; //對飲料描述 public string GetDescription() { return description; } //返回原料價格 public abstract double Cost();}
2.Espresso濃縮咖啡
/// <summary>/// Espresso 濃縮咖啡/// </summary>public class Espresso : Beverage{ //構造函數public Espresso(){ description = "Espresso";} //價格 public override double Cost() { return 1.99; }}
3.HouseBlend綜合咖啡
/// <summary>/// HouseBlend 綜合咖啡/// </summary>public class HouseBlend : Beverage{ //構造函數public HouseBlend(){ description = "House Blend Coffee";} //價格 public override double Cost() { return 0.89; }}
4.CondimentDecorator調料基類
/// <summary>/// CondimentDecorator 調料基類/// </summary>public abstract class CondimentDecorator : Beverage{ //public abstract string GetDescription();}
5.Milk咖啡裝飾者:牛奶
/// <summary>/// Milk 咖啡裝飾者:牛奶/// </summary>public class Milk : CondimentDecorator{ Beverage beverage; //構造函數,傳入一個Beverage對象用於包裝 public Milk(Beverage beverage){ this.beverage = beverage; this.description = beverage.GetDescription() + ", Milk";} //價格 public override double Cost() { return 0.1 + beverage.Cost(); }}
6.Mocha咖啡裝飾者:摩卡
/// <summary>/// Mocha 咖啡裝飾者:摩卡/// </summary>public class Mocha : CondimentDecorator{ Beverage beverage; //構造函數,傳入一個Beverage對象用於包裝public Mocha(Beverage beverage){ this.beverage = beverage; this.description = beverage.GetDescription() + ", Mocha";} //價格 public override double Cost() { return 0.2 + beverage.Cost(); }}
6.調用
//濃縮咖啡protected void Button1_Click(object sender, EventArgs e){ Beverage beverage = new Espresso(); beverage = new Mocha(beverage); beverage = new Milk(beverage); Response.Write(beverage.GetDescription() + " $" + beverage.Cost());}//綜合咖啡protected void Button2_Click(object sender, EventArgs e){ Beverage beverage = new HouseBlend(); beverage = new Mocha(beverage); Response.Write(beverage.GetDescription() + " $" + beverage.Cost());}
- 裝飾者模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 【模式模式】模式总结
- 互联网产品的灰度发布
- Android (代码片段) 将网络或文件字节流转换为字符串(UT-8格式的)在进行网络交互时特别重要
- ASCII 值表
- CSS 鼠标样式
- Eclipse导入Tomcat源码
- 裝飾者模式
- GB2312简体中文编码表
- UVA 146 ID编码
- oracle存储管理
- UI线程与其他线程
- 内存池技术畅想
- GBK汉字编码表-1-2-3
- ubuntu创建和开启ssh服务, windows登陆
- Android显示系统之Pixel、Bitmap、Drawable、Canvas、Paint和Matrix之间的联系