设计模式_命令模式

/**
 * 定义:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,
 * 这种无法抵御变化的紧耦合是不合适的
 * 。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。
 * 
 */
/**
 *命令模式组成:1.抽象命令;2、命令的执行者;3、命令的控制着 
 */

/**
 *命令的执行者 
 */
 class Excuer{
     void commondA(){}
     void commondB(){}
     void commondC(){}
 }

/**
 *抽象命令
 */

 interface Commond{
  public void excute();
}
/**
 *具体命令类A 
 */
 class CommondA implements Commond{
    private Excuer excuer;
    public CommondA(Excuer _Excuer)
     {
         excuer = _Excuer;
     }

    @Override
    public void excute() {
        // TODO Auto-generated method stub
        System.out.println("CommondA");
        excuer.commondA();
    }
 }

 /**
  *具体命令类B 
  */
  class CommondB implements Commond{
     Excuer excuer;
    public  CommondB(Excuer _Excuer)
     {
         excuer = _Excuer;
     }

    @Override
    public void excute() {
        // TODO Auto-generated method stub
        System.out.println("CommondB");
        excuer.commondB();
    }
  }


  /**
   *具体命令类C 
   */
   class CommondC implements Commond{
     Excuer excuer;
    public CommondC(Excuer _Excuer)
     {
         excuer = _Excuer;
     }

    @Override
    public void excute() {
        // TODO Auto-generated method stub
        System.out.println("CommondC");
        excuer.commondC();
    }
   }

/**
 *命令的协调控制者 
 */
   class Invoker{
       Commond commond_a,commond_b;
       void setCommond(Commond _commond,Commond comm)
       {

           commond_a = _commond;
           commond_b = comm;
       }
       //commond a
       void commondA(){
           commond_a.excute();
       }

       //commond b
       void commondB(){
           commond_b.excute();
       }
   }

/**
 * 命令模式
 */
public class Pattern_03_Command {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Excuer excuer = new Excuer();// receriver
        Commond  commond_a = new CommondA(excuer);
        Commond  commond_b = new CommondB(excuer);

        Invoker invoker = new Invoker();
        invoker.setCommond(commond_a, commond_b);
        invoker.commondA();
        invoker.commondB();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值