[登录]
[注册]
论坛首页
班级日历
淘宝购买
学员作品
本杰.NET
»
.NET技术讨论
»
DesignPattern
»
命令模式14,有代码有真相
.NET培训教程
[本杰.NET]1002班
[本杰.NET]1001班
[本杰.NET]0901班
[本杰.NET]学员就业
终身学员资源发布及交流
.NET技术讨论
C#
WinForm
.NET Framework
SQL Server
DHTML
ASP.NET
ADO.NET
UML
DesignPattern
WebService
AJAX
就业面试
命令模式14,有代码有真相
[
1023
查看 /
0
回复 ]
返回列表
发送短消息
UID
29
精华
6
威望
13395
金钱
11030 元
技术指数
4282 点
查看公共资料
搜索帖子
shenyoujia
陈健
组别
管理员
性别
积分
14848
帖子
1423
注册时间
2009-11-07
shenyoujia
2010-01-08 05:08
|
只看楼主
1
#
字体大小:
t
T
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _14Command
{
//客户类,调用者
class Program
{
static void Main(string[] args)
{
//new Service().ProviderCook();
Service cook = new Service();
cook.修改烧烤策略("烧烤鸡翅");
cook.ProviderCook();
}
}
//服务员类,invoker
class Service
{
//c#暂时不知道有类似java匿名内部类的用法
//一个命令是简化,可以是一组命令对应一组接收,具体的视业务逻辑而定
private Command cmd = null;
private Reciever reciever = null;
//变化点
public Service()
{
cmd = new DefaultCommand();
reciever = new DefaultReciever();
}
//修改cmd和reciever指针指向的策略
//结合策略模式,动态的修改烧烤的策略(想换什么策略都可以);加上反射,符合 OCP 开闭 的设计原则
public void 修改烧烤策略(string 烧烤类别)
{
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load("14Command");
cmd = assembly.CreateInstance("_14Command." + 烧烤类别 + "Command") as Command;
reciever = assembly.CreateInstance("_14Command." + 烧烤类别 + "Reciever") as Reciever;
}
public void ProviderCook()
{
cmd.Cook = reciever;
cmd.执行命令();
}
}
//命令父类
abstract class Command
{
private Reciever cook;
internal Reciever Cook
{
get { return cook; }
set { cook = value; }
}
public virtual void 执行命令()
{
Console.WriteLine("如果没有特殊指定,我将烧烤的是鸡心");
cook.烧烤();
}
}
//命令的reciever,厨师父类
abstract class Reciever
{
public virtual void 烧烤()
{
Console.WriteLine("如果不指定具体的厨师,则派我家最有名的大厨掌勺");
}
}
//具体Command子类,先是默认实现
class DefaultCommand : Command { }
//具体Reciever子类,先是默认实现
class DefaultReciever : Reciever { }
//具体Command子类,烧烤鸡翅
class 烧烤鸡翅Command : Command
{
public override void 执行命令()
{
//base.执行命令();
Console.WriteLine("这次的命令是烧烤鸡翅");
base.Cook.烧烤();
}
}
//具体Reciever子类,烧烤鸡翅
class 烧烤鸡翅Reciever : Reciever
{
public override void 烧烤()
{
Console.WriteLine("我是小王师傅,专门负责烧烤鸡翅");
//base.烧烤();
}
}
//具体Command子类,烧烤鸡腿
class 烧烤鸡腿Command : Command { }
//具体Reciever子类,烧烤鸡腿
class 烧烤鸡腿Reciever : Reciever { }
}
复制代码
1
评分次数
TOP
返回列表
上一主题
|
下一主题
发新主题
.NET培训教程
[本杰.NET]1002班
[本杰.NET]1001班
[本杰.NET]0901班
[本杰.NET]学员就业
终身学员资源发布及交流
.NET技术讨论
C#
WinForm
.NET Framework
SQL Server
DHTML
ASP.NET
ADO.NET
UML
DesignPattern
WebService
AJAX
就业面试
.NET Framework
C#
[本杰.NET]学员就业
0901班-ERP之OA
DHTML
SQL Server
[本杰.NET]1101班[报名中]
[本杰.NET]1002班
[本杰.NET]1001班
[本杰.NET]0901班
帖子标题
作者
我的资料