标签:
最近在学习设计模式,参考《大话设计模式》这一经典书籍,为了加深自己理解,在这比划比划!
1.策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
描述:1)定义一个算法的抽象基类,包含一个公共方法(C++中的纯虚函数);
2)定义基类的子类,每个子类都用不同算法去实现;
3)定义一个辅助类,类内部包含一个成员变量为抽象基类的指针(C++中抽象基类不能实现产生对象),以及一个方法,方法的内部是调用基类指针指向对象的公共算法,由 多态性可知,这时候会动态绑定,调用不同的算法。
测试代码如下:
1 #include <iostream> 2 using namespace std; 3 4 class Base{ 5 public: 6 virtual void Display() = 0; 7 }; 8 class A : public Base{ 9 public: 10 void Display(){ 11 cout<<"A algorithm"<<endl; 12 } 13 }; 14 class B : public Base{ 15 public: 16 void Display(){ 17 cout<<"B algorithm"<<endl; 18 } 19 }; 20 class C : public Base{ 21 public: 22 void Display(){ 23 cout<<"C algorithm"<<endl; 24 } 25 }; 26 class context{ 27 private: 28 Base* pBase; 29 public: 30 context (Base* pB){ 31 pBase = pB; 32 } 33 void Display(){ 34 pBase->Display(); 35 } 36 }; 37 int main(){ 38 context c1((Base*)new A), c2((Base*)new B), c3((Base*)new C); 39 c1.Display(); 40 c2.Display(); 41 c3.Display(); 42 return 0; 43 }
运行结果为:
A algorithm
B algorithm
C algorithm
标签:
原文地址:http://www.cnblogs.com/xiaomin-is-fighting/p/4556355.html