命令模式是一种行为型模式,将请求封装为一个对象,是发出请求的责任与执行请求的责任分离,降低了系统的耦合度。以咖啡店为例,服务员根据顾客的点单,发出制作咖啡的请求,不同咖啡师根据咖啡的类别制作咖啡。
namespace Designmode.Command
{
/// <summary>
/// Coffee的接口类
/// </summary>
public interface ICoffee
{
/// <summary>
/// 制作咖啡
/// </summary>
void Make();
}
}
namespace Designmode.Command
{
/// <summary>
/// 拿铁咖啡
/// </summary>
public class LatteCoffee : ICoffee
{
/// <summary>
/// 拿铁咖啡师
/// </summary>
public LatteBarista _barista = new LatteBarista();
/// <summary>
/// 制作咖啡
/// </summary>
public void Make()
{
_barista.Make();
}
}
}
namespace Designmode.Command
{
/// <summary>
/// 卡布基诺咖啡
/// </summary>
public class CappuccinoCoffee:ICoffee
{
/// <summary>
/// 卡布基诺咖啡师
/// </summary>
public CappuccinoBarista _barista = new CappuccinoBarista();
/// <summary>
/// 制作咖啡
/// </summary>
public void Make()
{
_barista.Make();
}
}
}
namespace Designmode.Command
{
/// <summary>
/// 拿铁咖啡师
/// </summary>
public class LatteBarista
{
/// <summary>
/// 制作
/// </summary>
public void Make()
{
Console.WriteLine($"制作拿铁咖啡.");
}
}
}
namespace Designmode.Command
{
/// <summary>
/// 卡布基诺咖啡师
/// </summary>
public class CappuccinoBarista
{
/// <summary>
/// 制作
/// </summary>
public void Make()
{
Console.WriteLine($"制作卡布基诺咖啡.");
}
}
}
namespace Designmode.Command
{
/// <summary>
/// 前台服务员
/// </summary>
public class Waiter
{
/// <summary>
/// 拿铁咖啡
/// </summary>
private ICoffee _latte = null;
/// <summary>
/// 卡布奇多咖啡
/// </summary>
private ICoffee _capuccino = null;
/// <summary>
/// 设置拿铁咖啡
/// </summary>
/// <param name="latte"></param>
public void SetLatte(ICoffee latte)
{
this._latte = latte;
}
/// <summary>
/// 设置卡布奇诺咖啡
/// </summary>
/// <param name="capuccino"></param>
public void SetCappuccino(ICoffee capuccino)
{
this._capuccino = capuccino;
}
/// <summary>
/// 选择拿铁咖啡
/// </summary>
public void ChooseLatte()
{
this._latte.Make();
}
/// <summary>
/// 选择卡布基诺咖啡
/// </summary>
public void ChooseCappuccino()
{
this._capuccino.Make();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.Command;
namespace Designmode
{
class Program
{
static void Main(string[] args)
{
#region 命令模式
Waiter waiter = new Waiter();
waiter.SetLatte(new LatteCoffee());
waiter.SetCappuccino(new CappuccinoCoffee());
waiter.ChooseLatte();
waiter.ChooseCappuccino();
#endregion
}
}
}