裝飾者模式

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());
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值