Command--------行为型设计模式之二

原创 2004年07月09日 10:29:00

例子:

class Pay
{
public:
 virtual float CalculatePay()= 0;
};
class Commissioned:public Pay
{
public:
 Commissioned(float fbasepay,float fcommission):_basePay(fbasepay),_commissionRate(fcommission)
 {
 }
 float CalculatePay()
 {
  return _basePay*_commissionRate;
 }
private:
 float _basePay;
 float _commissionRate;
};
class Salaried:public Pay
{
public:
 Salaried(float fmonthlypay):_fmonthlypay(fmonthlypay)
 {
 }
 float CalculatePay()
 {
  return _fmonthlypay;
 }
private:
 float _fmonthlypay;
};
class Hourly:public Pay
{
public:
 Hourly(float fhourlyrate):_fhourlyrate(fhourlyrate)
 {
 }
 float CalculatePay()
 {
  return _fhourlyrate;
 }
private:
 float _fhourlyrate;
};

class Employee
{
public:
 Employee(int iid,CString strname):_iId(iid),_strName(strname),_pay(NULL)
 {
 }
 //set the type of pay
 void SetPayType(counst Pay* pPay)
 {
  if(_pay)
   delete _pay;
  if(pPay)
   _pay = pPay;
 }
 float GetPay()
 {
  return _pay->CalculatePay();
 }
private:
 CString _strName;
 int _iId;
 Pay* _pay;
}

void main()
{
 Vector<Employee> vect;
 Employee e1(1,"e1");
 e1.SetPayType (new Salaried(50));
 vect.push_back(e1);

 Employee e2(2,"e2");
 e2.SetPayType (new Commissioned(50,0.8));
 vect.push_back(e2);

 Employee e3(3,"e3");
 e3.SetPayType (new Hourly(4));
 vect.push_back(e3);

 float fTotal = 0;
 for(int i = 0;i< vect.size();i++)
 {
  fTotal += ((Emplyee)vect[i]).GetPay();
 }
}

调用者基本只和接口打交道,不和具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个工资类型时,就不必修改调用者main中的代码了.

使用Command模式的一个好理由还因为它能实现Undo功能.每个具体命令都可以记住它刚刚执行的动作,并且在需要时恢复.

undo的代码等等再加!


 

【设计模式攻略】行为型模式之Command模式

概要 一种行为触发另一种行为,这是程序控制中最基本的逻辑。触发的形式,可以有很多种,比如我们经常通过一系列命令或指令来区分不同的触发行为,而在实现的过程中,很多人容易犯这样一个错误,就是把触发方与执...
  • my_business
  • my_business
  • 2013年10月23日 10:37
  • 2033

设计模式(行为型)之命令模式(Command Pattern)

在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与...
  • yanbober
  • yanbober
  • 2015年05月05日 11:49
  • 3026

JAVA设计模式(15):行为型-命令模式(Command)

介绍 命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式。 ...
  • dreamsunday
  • dreamsunday
  • 2015年05月09日 14:26
  • 3645

C#面向对象设计模式纵横谈\15 行为型模式Command命令模式.zip

  • 2009年12月20日 13:00
  • 7.56MB
  • 下载

"围观"设计模式(23)--行为型之命令模式(Command Pattern)

在面向对象程式设计的范畴中,命令模式是一种设计模式,它尝试以物件来代表实际行动。命令物件可以把行动(action) 及其参数封装起来,于是这些行动可以被: 重复多次取消(如果该物件有实作的话)取消后...
  • wangyang1354
  • wangyang1354
  • 2016年06月25日 17:00
  • 3678

设计模式(4)-行为型-命令模式(Command)

> 意图: 将一个请求封装为一个对象(即我们创建的Command命令对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。 个人理解: 命令模式是为了解...
  • qq_29994609
  • qq_29994609
  • 2016年08月24日 21:22
  • 185

设计模式(14)-行为型-命令模式(Command)

概述将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。适用性抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(c a l l b...
  • iihero
  • iihero
  • 2012年11月22日 06:29
  • 1878

JAVA设计模式(15):行为型-命令模式(Command)

装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一...
  • taozi8023
  • taozi8023
  • 2016年05月19日 12:58
  • 7714

23种设计模式(14)_行为型_命令模式(Command Pattern)

定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式的封装性很好:每个命令都被封装起来,对于客户端来说,需要什么功能...
  • heyuchang666
  • heyuchang666
  • 2015年12月27日 16:39
  • 552

JAVA设计模式(15):行为型-命令模式(Command)

装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一...
  • yuwentao886
  • yuwentao886
  • 2017年06月23日 14:50
  • 104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Command--------行为型设计模式之二
举报原因:
原因补充:

(最多只允许输入30个字)