策略模式:
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes interchangeable. Strategy lets the algorithm vary independently from clients that use it.
设计基础:
抽象 Abstraction
封装 Encapsulation
多态 Polymorphism
继承 Inheritance
设计原则:
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
2.针对接口编程,而不是针对实现编程。
3.多用组合,少用继承。
要点:
Knowing the OO basics does not make you a good OO designer.
知道OO基础,并不足以让你设计出良好的OO系统。
Good OO designs are reusable, extensible and maintainable.
良好的OO设计必须具备的特性:可复用、可扩充、可维护。
Patterns show you how to build systems with good OO design qualities.
模式可以让我们建造出具有良好OO设计质量的系统。
Patterns are proven OO experience.
模式被认为是历经验证的OO设计经验。
Patterns don't give you code, they give you general solutions to design problems. You apply them to your specific application.
模式不是代码,而是针对设计问题的通用解决方案。你可以把它们应用到特定的应用中。
Patterns arenot invented, they are discovered.
模式不是被发明的,而是被发现的。
Most patterns and principles address issues of change in software.
大多数的模式和原则,都着眼于软件保护的主题。
Most patterns allow some part of a system to vary independently of all other parts.
大多数的模式都允许系统局部改变独立于其他部分。
We often try to take what varies in a system and encapsulate it.
我们常把系统中会变化的部分抽出来封装。
Patterns provide a shared language that can maximize the value of your communication with other developers.
模式让开发人员之间有共享的语言,能够最大化沟通的价值。
心得:
Java的接口对应c++的纯虚函数。
实例:
设计一个鸭子类,具有飞翔行为,可动态设置其飞翔动作。
实现:
接口:
class CFlyBehavior {public:CFlyBehavior();virtual ~CFlyBehavior();virtual void fly() = 0;};
飞翔行为,此后的所有飞翔算法都集成此超类
算法族:class CFlyWithWings : public CFlyBehavior {public:virtual void fly();CFlyWithWings();virtual ~CFlyWithWings() {printf("I'm fly with wings\n");}
};
class CFlyNoWay : public CFlyBehavior {public:virtual void fly();CFlyNoWay();virtual ~CFlyNoWay() {printf("I can't fly\n");}};
鸭子类:
class CFlyBehavior;class CDuck {public:void SetFlyBehavior(CFlyBehavior *fb){SAFEDELETE(m_flyBehavior ); m_flyBehavior = fb;}void fly(){if(m_flyBehavior != NULL) m_flyBehavior->fly();}CDuck(CFlyBehavior *fb = NULL){SetFlyBehavior(fb);}virtual ~CDuck(){SAFEDELETE(m_flyBehavior );}private:CFlyBehavior *m_flyBehavior;};
测试:
int main(){CDuck duck;duck.fly();duck.SetFlyBehavior(new CFlyWithWings());duck.fly();
CDuck rduck;rduck.fly();rduck.SetFlyBehavior(new CFlyWithRocket());rduck.fly();system("pause");return 0;}
结果:
完整代码下载:
http://download.csdn.net/detail/captainwong/5602179
相关文章
- [学习笔记]设计模式之Singleton
- 《大话设计模式》学习笔记0:设计模式的原则 && UML类图
- 再起航,我的学习笔记之JavaScript设计模式14(桥接模式)
- 再起航,我的学习笔记之JavaScript设计模式24(备忘录模式)
- 再起航,我的学习笔记之JavaScript设计模式17(模板方法模式)
- 再起航,我的学习笔记之JavaScript设计模式22(访问者模式)
- 再起航,我的学习笔记之JavaScript设计模式08(建造者模式)
- 再起航,我的学习笔记之JavaScript设计模式09(原型模式)
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- C#设计模式学习笔记:设计原则