beyondjay

 

Decorator模式

根据《Head Of Design Pattern》里面的Java代码改写的Decorator模式

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Design_Pattern_Decorator : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Beverage beverage1 = new Espresso();
        beverage1 = new Mocha(beverage1);
        beverage1 = new Sugar(beverage1);
        Response.Write(beverage1.cost());
        Response.Write(beverage1.GetDescription());
    }
}

public abstract class Beverage
{
    protected string description = "Unknown Beverage";

    public virtual string GetDescription()
    {
        return description;
    }

    public abstract double cost();
}

public class Espresso : Beverage
{
    public Espresso()
    {
        this.description = "Espresso";
    }

    public override double cost()
    {
        return 1.99;
    }
}

public class HouseBlend : Beverage
{
    public HouseBlend()
    {
        this.description = "House Blend";
    }

    public override double cost()
    {
        return 0.89;
    }
}

public abstract class CondimentDecorator : Beverage
{
   public override abstract string GetDescription();
}

public class Mocha : CondimentDecorator
{
    Beverage beverage;

    public Mocha(Beverage beverage)
    {
        this.beverage = beverage;
    }

    public override string GetDescription()
    {
        this.description = beverage.GetDescription() + ", Mocha";
        return this.description;
    }

    public override double cost()
    {
        return beverage.cost() + 0.2;
    }
}

public class Sugar : CondimentDecorator
{
    Beverage beverage;

    public Sugar(Beverage beverage)
    {
        this.beverage = beverage;
    }

    public override string GetDescription()
    {
        return beverage.GetDescription() + ", Sugar";
    }

    public override double cost()
    {
        return beverage.cost() + 0.12;
    }
   
}

 

posted on 2008-03-03 13:46 Tony Zhou 阅读(9) 评论(0)  编辑 收藏 所属分类: 百无聊赖设计模式系列


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
 


导航

统计

公告

目前一天5小时花在英语上 7-24 11:51

与我联系

常用链接

留言簿

我参与的团队

我的标签

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜