head first 设计模式 策略模式
2014-05-20 19:44
281 查看
HEAD FIRST:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于它的客户而变化。
大话设计模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
使用这个模式的原因:
用许多的算法对一类进行计算。那么如果把这些算法强行编码到这个类当中。其实是不可取的.因为很多时候下不同的情况下使用不同的算法。如果要添加新的算法也比较麻烦。如果一次性就包含了所有的算法那就很庞大了。
设计原则一:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起.
这里变化的代码是说.各种可能会变化的Strategy.也就是一些行为或者算法.把会变化的部分取出来并“封装”起来,好让其他部分不受到影响。
设计原则二:针对接口编程:关键在于多态,执行时可以根据实际情况执行到真正的行为,不会被绑定到固定的行为上。通常来说,变量的声明类型一遍是抽象类或者接口。如此,只要是具体实现次超类型的类所产生的对象,都可以指定给这个声明的变量。也就是说。声明类的时候不需要理会以后执行时候对应的真正的类型对象。
设计原则三:多用组合 少用继承.
小理解:
Context中有一个Strategy的引用.他可以在Strategy的子类来实例化.也可以动态的改变..赋予某一个子类的实例.然后在Context中用一个方法来实现这个引用->Algorithminterface()...差不多就是这个意思...
如下:Duck类是 Context
然后FlyBehavior QuackBehavior是Strategy 类
在Duck类中的两个引用
FlyBehavior* flys;
QuackBehavior *quas;
好吧~~基本明白了吧~~
设计模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于它的客户而变化。
大话设计模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
使用这个模式的原因:
用许多的算法对一类进行计算。那么如果把这些算法强行编码到这个类当中。其实是不可取的.因为很多时候下不同的情况下使用不同的算法。如果要添加新的算法也比较麻烦。如果一次性就包含了所有的算法那就很庞大了。
设计原则一:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起.
这里变化的代码是说.各种可能会变化的Strategy.也就是一些行为或者算法.把会变化的部分取出来并“封装”起来,好让其他部分不受到影响。
设计原则二:针对接口编程:关键在于多态,执行时可以根据实际情况执行到真正的行为,不会被绑定到固定的行为上。通常来说,变量的声明类型一遍是抽象类或者接口。如此,只要是具体实现次超类型的类所产生的对象,都可以指定给这个声明的变量。也就是说。声明类的时候不需要理会以后执行时候对应的真正的类型对象。
设计原则三:多用组合 少用继承.
小理解:
Context中有一个Strategy的引用.他可以在Strategy的子类来实例化.也可以动态的改变..赋予某一个子类的实例.然后在Context中用一个方法来实现这个引用->Algorithminterface()...差不多就是这个意思...
如下:Duck类是 Context
然后FlyBehavior QuackBehavior是Strategy 类
在Duck类中的两个引用
FlyBehavior* flys;
QuackBehavior *quas;
好吧~~基本明白了吧~~
#include "stdafx.h" #include<iostream> using namespace std; class FlyBehavior { public: virtual void fly()=0; }; class QuackBehavior { public: virtual void quack()=0; }; class guaguaQuack:public QuackBehavior { virtual void quack() { cout<<"guaguaQuack"<<endl; } }; class wangwangQuack:public QuackBehavior { virtual void quack() { cout<<"wangwangQuack"<<endl; } }; class noQuack:public QuackBehavior { virtual void quack() { cout<<"keepSilent"<<endl; } }; class CanFly:public FlyBehavior { virtual void fly() { cout<<"I can fly"<<endl; } }; class CannotFly:public FlyBehavior { virtual void fly() { cout<<"I cannot fly"<<endl; } }; class Duck { public: FlyBehavior* flys; QuackBehavior *quas; virtual void display()=0; void setFlyBehavier(FlyBehavior *f) { flys = f; } void setQuackBehavior(QuackBehavior *q) { quas = q; } void performFly() { flys->fly(); } void performQua() { quas->quack(); } void performSwim() { cout<<"i can swim...all the ducks"<<endl; } }; class modelDuck:public Duck { public: modelDuck() { flys = new CannotFly; quas = new noQuack; } virtual void display() { cout<<"this is a model duck"<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { Duck *d = new modelDuck; d->display(); d->performFly(); d->setFlyBehavier(new CanFly); d->performFly(); //d->performQua(); //d->performSwim(); return 0; }
相关文章推荐
- head first 设计模式学习随笔(1)----策略模式
- Head First 设计模式 读书摘记(二) 策略模式 C#代码
- Head First 设计模式——策略模式(Strategy Pattern)
- Head First 设计模式学习笔记 ——策略模式
- Head First 设计模式——策略模式(Strategy Pattern)——Python实现
- [学习笔记]Head First 设计模式 - 策略模式(Strategy)
- Head First 设计模式:1策略模式
- Head First 设计模式读书笔记(1)-策略模式
- 《Head First 设计模式》策略模式
- 《Head First 设计模式》之策略模式
- Head First 设计模式阅读所得:策略模式(Strategy Pattern) 接口的用处(之一)
- 《Head First 设计模式》学习笔记:策略模式与观察者模式
- Head First 设计模式 C++实现-Strategy(策略模式)
- Head First设计模式笔记之(策略模式)
- 《head first 设计模式》之策略模式
- Head First_设计模式_学习笔记_第01章_策略模式
- Head First 设计模式第一章 ----策略模式
- Head First 设计模式(1):策略模式
- <Head First 设计模式>:策略模式--Duck
- Head First 设计模式 C++实现-Strategy(策略模式)