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.姓名 = _姓名; }
}
浙公网安备 33010602011771号