结合项目实例 回顾传统设计模式(六)命令模式

命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。用户程序在使用的时候,只与该命令对象打交道,而不用与一类对象打交道,降低了耦合性,提高了程序设计的灵活性。

我们还是那数据库操作为例

   public  class DBInstance
    {
         public  void ExecuteNonQuery()
        {
        }

         public  void ExecuteDataset()
        {
        }
       
    }
     public  class SqlInstance : DBInstance
    {
         public  void ExecuteNonQuery()
        {
            Console.WriteLine( " this is a SqlInstance ");
        }
    }
     public  class OracleInstance : DBInstance
    {
         public  void ExecuteNonQuery()
        {
            Console.WriteLine( " this is a OracleInstance ");
        }
    }
public  interface Command
    {
         void execute();
    }

     public  class SqlCommand : Command
    {
        SqlInstance sqlinstance;
         public SqlCommand(SqlInstance sqlins)
        {
             this.sqlinstance = sqlins;
        }
         public  void execute()
        {
            sqlinstance.ExecuteNonQuery();
        }
    }

     public  class OracleCommand : Command
    {
        OracleInstance Oracleinstance;
         public OracleCommand(OracleInstance Oracleins)
        {
             this.Oracleinstance = Oracleins;
        }
         public  void execute()
        {
            Oracleinstance.ExecuteNonQuery();
        }
    }

     public  class DBControl
    {
        Command[] commands;
         public DBControl()
        {
            commands =  new Command[ 2];
        }
         public  void setCommand( int index,Command comm)
        {
            commands[index] = comm;
        }
         public  void control( int index)
        {
            commands[index].execute();
        }
    }

测试下命令模式

 DBControl dc =  new DBControl();
            SqlInstance si =  new SqlInstance();
            SqlCommand sc =  new SqlCommand(si);
            OracleInstance oi =  new OracleInstance();
            OracleCommand oc =  new OracleCommand(oi);

            dc.setCommand( 0, sc);
            dc.setCommand( 1, oc);

            dc.control( 0);
            dc.control( 1);

总结:有的同学可能会问接收者有必要存在吗?为何命令对象不知想实现execute()方法的细节。一般来说,我们设计命令对象,它或许只需要调用一个接收者的一个行为。然而有许多命令对象会实现许多逻辑,直接完成一个请求。当然你可以设计更全面的命令对象,只是这样一来,调用者和接收者之间的解耦程度会再度降低。实际项目中命令可以将运算快打包(一个接收者一组动作),然后将他们传来传去,就像是普通对象一样。所以在日程安排、线程池、事务队列中命令模式的使用也是比较广泛的,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值