博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结合项目实例 回顾传统设计模式(六)命令模式
阅读量:7112 次
发布时间:2019-06-28

本文共 1715 字,大约阅读时间需要 5 分钟。

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

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

  
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

转载地址:http://prmhl.baihongyu.com/

你可能感兴趣的文章
【转载】ajax IE7,IE8浏览器请求本地资源出现access is denied拒绝访问
查看>>
警惕!黑客入侵 你的VR头盔真的安全吗?
查看>>
C++基础——运算符重载友元函数示例
查看>>
do housework
查看>>
navicat安装步骤
查看>>
hdu1059
查看>>
Linux 挂载分区 + swap 分区
查看>>
ORB-SLAM(五)KeyFrameDataBase类
查看>>
正确使用 Volatile 变量
查看>>
01 找最大剩余体积 洛谷1049 装箱问题
查看>>
sql截取字符串后面四位
查看>>
快速入门(十四)
查看>>
pku2752 Seek the Name, Seek the Fame
查看>>
高通Vuforia(Unity3D)云识别初级使用教程
查看>>
1月25日学习内容整理:stark组件之获得model中的字段名称,如何构造查询页面
查看>>
Mysql 基本操作命令
查看>>
Django(中间件)
查看>>
vim乱码处理
查看>>
Android Security Internals
查看>>
返回顶部浮动图标代码
查看>>