标签:
需求public class Barbecuer
{
public void MakeMutton()
{
System.out.println("烤羊肉串!");
}
public void MakeChickenWing()
{
System.out.println("烤鸡翅!");
}
}public class Main
{
public static void main(String[] args)
{
Barbecuer boy=new Barbecuer();
boy.MakeMutton();
boy.MakeChickenWing();
}
}
客户端程序与烤肉串者紧耦合,尽管简单但却极为僵化,有许许多多的安全隐患。
级别2
public class Barbecuer
{
public void MakeMutton()
{
System.out.println("烤羊肉串!");
}
public void MakeChickenWing()
{
System.out.println("烤鸡翅!");
}
}public abstract class Command
{
private Barbecuer barbecuer;
public Command(Barbecuer bar)
{
this.barbecuer=bar;
}
public Barbecuer getBarbecuer()
{
return barbecuer;
}
public abstract void excuteCommand();
} public class BakeChickenWingCommand extends Command
{
public BakeChickenWingCommand(Barbecuer bar)
{
super(bar);
}
@Override
public void excuteCommand()
{
this.getBarbecuer().MakeChickenWing();
}
} public class BakeMuttonCommand extends Command
{
public BakeMuttonCommand(Barbecuer bar)
{
super(bar);
}
@Override
public void excuteCommand()
{
this.getBarbecuer().MakeMutton();
}
} import java.util.*;
public class Waiter
{
public List<Command> orders=new ArrayList<Command>();
// 设置订单
public void setOrder(Command com)
{
orders.add(com);
System.out.println("add an order "+new Date());
}
// 取消订单
public void cancelOrder(Command com)
{
orders.remove(com);
System.out.println("Cancel the order "+new Date());
}
// 全部执行
public void inform()
{
for(Command c:orders)
{
c.excuteCommand();
}
}
}public class Main
{
public static void main(String[] args)
{
//开店前的准备
Barbecuer boy=new Barbecuer();
Command command1=new BakeMuttonCommand(boy);
Command command2=new BakeMuttonCommand(boy);
Command command3=new BakeChickenWingCommand(boy);
//开门营业顾客点菜
Waiter waiter=new Waiter();
waiter.setOrder(command1);
waiter.setOrder(command2);
waiter.setOrder(command3);
//通知厨房
waiter.inform();
//取消订单
waiter.cancelOrder(command2);
//再次通知厨房
waiter.inform();
}
} 命令模式,将一组行为抽象为对象,实现二者之间的松耦合。在软件系统中,行为请求者与行为实现者通常呈现一种紧耦合。但在某些场合,比如要对行为进行记录、撤销/重做、事务等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,需要将行为请求者与行为实现者解耦。使用命令模式较容易地设计一个命令队列;在需要的情况下,可以容易地将命令记入日志;允许接收请求的一方决定是否要否决请求;可以容易地实现对请求的撤销和重做;由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。敏捷开发原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。
标签:
原文地址:http://blog.csdn.net/qq_32400847/article/details/51356597