策略模式(1)——基本思想

 

定义算法族,分别封装起来,让他们之间可以互换,此模式让算法的变化独立于使用算法的客户。

 

因为常用c++,将其思想转化为C++语言的描写,但本质都是一样的,java中有接口类,所以首先利用c++制造出接口类

 

重要的是利用组合,而不要用继承,将会改变的都继承于一个接口,每一个行为都继承于一个接口类,再由行为类实现接口

 

然后再整合行为:在实现的类中整合实例变量,即接口类型,

 

  1. class flybehavior  
  2. {  
  3. public:  
  4.     virtual void fly()=0;  
  5. //  virtual ~flybehavior(){};   
  6.   
  7. };  
  8.   
  9. class Flywithwings :  public flybehavior  
  10. {  
  11. public:  
  12.     virtual void fly(){  
  13.         cout<<"duck fly"<<endl;  
  14.     }  
  15. };  
  16.   
  17. class Flynoway :  public flybehavior  
  18. {  
  19. public:  
  20.     virtual void fly(){  
  21.         cout<<"no fly"<<endl;  
  22.     }  
  23. };  
  24.   
  25. class quackbehavior  
  26. {  
  27. public:  
  28.     virtual void quack()=0;  
  29. //  virtual ~quackbehavior(){};  
  30.   
  31. };  
  32.   
  33. class quackis :  public quackbehavior  
  34. {  
  35. public:  
  36.     virtual void quack(){  
  37.         cout<<"quack"<<endl;  
  38.     }  
  39. };  
  40.   
  41. class quackno :  public quackbehavior  
  42. {  
  43. public:  
  44.     virtual void quack(){  
  45.         cout<<"no quack"<<endl;  
  46.     }  
  47. };  
  48.   
  49. class duck  
  50. {  
  51. public:  
  52.     flybehavior *flys;  
  53.     quackbehavior *quacks;  
  54.   
  55.     void swim(){  
  56.         cout<<"swim"<<endl;  
  57.     }  
  58.   
  59.     void setfly(flybehavior *newflys)  
  60.     {  
  61.         flys=newflys;  
  62.     }  
  63.   
  64.     void setquack(quackbehavior *newquack)  
  65.     {  
  66.         quacks=newquack;  
  67.     }  
  68.   
  69.     void peformfly()  
  70.     {  
  71.         flys->fly();  
  72.     }  
  73.   
  74.     void peformquack()  
  75.     {  
  76.         quacks->quack();  
  77.     }  
  78.   
  79.     duck()  
  80.     {  
  81.         flys=NULL;  
  82.         quacks=NULL;  
  83.     }  
  84.     ~duck()  
  85.     {  
  86.         delete flys;  
  87.         delete quacks;  
  88.     }  
  89. };  
  90.   
  91. class modelduck : public duck  
  92. {  
  93. public:  
  94.     modelduck(){  
  95.         flys=new Flynoway();  
  96.         quacks=new quackno();  
  97.     }  
  98. };  
  99.   
  100. void main()  
  101. {  
  102.     modelduck duckss;  
  103.     duckss.peformfly();  
  104.     duckss.peformquack();  
  105.     flybehavior *text=new Flywithwings();  
  106.     duckss.setfly(text);  
  107.     duckss.peformfly();  
  108. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值