设计模式(4)一――行为型模式(五)

2014-11-24 02:43:04 · 作者: · 浏览: 12
Paper2 //学生乙抄的试卷
{
public override string Answer1()
{
return "b";
}
public override string Answer2()
{
return "b";
}
public override string Answer3()
{
return "b";
}
}
}


15. 命令模式

将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。它能比较容易的设计一个命令队列,可以容易的实现对请求的撤销和重做,添加命令不影响其他类


UML图:

\


代码:

view plaincopy to clipboardprint //23.6命令模式——通过参数达到不同的命令
namespace 命令模式
{
class Class2
{
static void Main(string[] args)
{
Receiver r = new Receiver();
Command2 c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.SetCommand(c);
i.ExecuteCommand();

Console.Read();
}
}

abstract class Command2 //抽象命令接口
{
protected Receiver receiver;
public Command2(Receiver receiver)
{
this.receiver=receiver ; //设置执行命令的对象
}

abstract public void Execute(); //执行命令
}

class ConcreteCommand : Command2
{
public ConcreteCommand(Receiver receiver)
: base(receiver)
{ }

public override void Execute()
{
receiver.Action(); //调用执行者的执行方法
}
}



class Invoker //命令的传递者——服务员
{
private Command2 command;

public void SetCommand(Command2 command)
{
this.command =command ;
}
public void ExecuteCommand()
{
command.Execute();
}
}
class Receiver //命令的接受者——执行者
{
public void Action()
{
Console.WriteLine("执行请求!");
}
}
}
//23.6命令模式——通过参数达到不同的命令
namespace 命令模式
{
class Class2
{
static void Main(string[] args)
{
Receiver r = new Receiver();
Command2 c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.SetCommand(c);
i.ExecuteCommand();

Console.Read();
}
}

abstract class Command2 //抽象命令接口
{
protected Receiver receiver;
public Command2(Receiver receiver)
{
this.receiver=receiver ; //设置执行命令的对象
}

abstract public void Execute(); //执行命令
}

class ConcreteCommand : Command2
{
public ConcreteCommand(Receiver receiver)
: base(receiver)
{ }

public override void Execute()
{
receiver.Action(); //调用执行者的执行方法
}
}

class Invoker //命令的传递者——服务员
{
private Command2 command;

public void SetCommand(Command2 command)
{
this.command =command ;
}
public void ExecuteCommand()
{
command.Execute();
}
}
class Receiver //命令的接受者——执行者
{
public void Action()
{
Console.WriteLine("执行请求!");
}
}
}


16. 状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的时候,状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。通过将各种状态转移到状态类的子类中减少相互之间的依赖。通过类中的函数将本身转换为下一个类,调用相应的方法。(举个例子:你想去办点事去找人,先是去得乡政府,乡长说这事不归我管你得去找书记,找到书记,书记又说这事不归我管你得去找县长,找到县长他说这事你得等我也没办法)


UML图:

\


代码:

view plaincopy to clipboardprint //