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

简介:

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

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

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


本文转自 熬夜的虫子  51CTO博客,原文链接:http://blog.51cto.com/dubing/712411

相关文章
|
5月前
|
设计模式 UED
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
|
5月前
|
设计模式 小程序 Java
Java设计模式【十五】:命令模式
Java设计模式【十五】:命令模式
26 0
|
7月前
|
设计模式 敏捷开发 C++
行为型设计模式07-命令模式
行为型设计模式07-命令模式
21 0
|
7月前
|
设计模式 语音技术
设计模式12 - 命令模式【Command Pattern】
设计模式12 - 命令模式【Command Pattern】
28 0
|
5月前
|
设计模式 存储 Java
认真学习设计模式之命令模式(Command Pattern)
认真学习设计模式之命令模式(Command Pattern)
83 0
|
1月前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
26 1
|
2月前
|
设计模式 存储 Java
【设计模式】命令模式
【设计模式】命令模式
|
4月前
|
设计模式 Java
设计模式-命令模式
设计模式-命令模式
34 1
|
4月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
33 0
|
4月前
|
设计模式 存储 Java
Java设计模式-命令模式
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。
31 1
Java设计模式-命令模式