DesignPattern - Command

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合

using System;
using System.Collections;
using System.Web;

using System.Collections.Generic;

public partial class DesignPattern_Command : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        烤串青年 烤串人 = new 烤串青年("背上有纹身的人");
        烤鸡肉串 鸡肉 = new 烤鸡肉串(烤串人);
        烤羊肉串 羊肉 = new 烤羊肉串(烤串人);
        服务员小姐 小姐 = new 服务员小姐(鸡肉);
        小姐.增加烧烤(鸡肉);
        小姐.增加烧烤(鸡肉);
        小姐.增加烧烤(羊肉);
        小姐.增加烧烤(羊肉);
        小姐.减少烧烤(鸡肉);
        小姐.执行烧烤();
    }
}

public class 烧烤
{
    public 烤串青年 一个青年;
    public 烧烤() { }
    public virtual void 烤串()
    {
        HttpContext.Current.Response.Write("</br>");
    }
}

public class 烤鸡肉串 : 烧烤
{
    public 烤鸡肉串(烤串青年 一个Parameter青年)
    {
        base.一个青年 = 一个Parameter青年;
    }
    public override void 烤串()
    {
        HttpContext.Current.Response.Write(base.一个青年.姓名 + ":烤鸡肉串");
        base.烤串();
    }
}

public class 烤羊肉串 : 烧烤
{
    public 烤羊肉串(烤串青年 一个Parameter青年)
    {
        base.一个青年 = 一个Parameter青年;
    }
    public override void 烤串()
    {
        HttpContext.Current.Response.Write(base.一个青年.姓名 + ":烤羊肉串");
        base.烤串();
    }
}

public class 服务员小姐
{
    private List<烧烤> 烧烤任务 = new List<烧烤>();
    public 服务员小姐(烧烤 一个烧烤任务)
    {
        烧烤任务.Add(一个烧烤任务);
    }

    public void 增加烧烤(烧烤 一个烧烤任务)
    {
        烧烤任务.Add(一个烧烤任务);
    }

    public void 减少烧烤(烧烤 一个烧烤任务)
    {
        foreach (烧烤 烤 in 烧烤任务)
        {
         
            if (烤.GetType()== 一个烧烤任务.GetType())
            {
                烧烤任务.Remove(烤);
                break;
            }
        }
    }

    public void 执行烧烤()
    {
        foreach (烧烤 烤 in 烧烤任务)
        {
            烤.烤串();
        }
    }
}

public class 烤串青年
{
    public string 姓名;
    public 烤串青年(string _姓名) { this.姓名 = _姓名; }
}

posted @ 2008-10-20 10:02  游侠_1  阅读(118)  评论(0)    收藏  举报