定义算法族,分别封装起来,让他们之间可以互换,此模式让算法的变化独立于使用算法的客户。
因为常用c++,将其思想转化为C++语言的描写,但本质都是一样的,java中有接口类,所以首先利用c++制造出接口类
重要的是利用组合,而不要用继承,将会改变的都继承于一个接口,每一个行为都继承于一个接口类,再由行为类实现接口
然后再整合行为:在实现的类中整合实例变量,即接口类型,
- class flybehavior
- {
- public:
- virtual void fly()=0;
- // virtual ~flybehavior(){};
- };
- class Flywithwings : public flybehavior
- {
- public:
- virtual void fly(){
- cout<<"duck fly"<<endl;
- }
- };
- class Flynoway : public flybehavior
- {
- public:
- virtual void fly(){
- cout<<"no fly"<<endl;
- }
- };
- class quackbehavior
- {
- public:
- virtual void quack()=0;
- // virtual ~quackbehavior(){};
- };
- class quackis : public quackbehavior
- {
- public:
- virtual void quack(){
- cout<<"quack"<<endl;
- }
- };
- class quackno : public quackbehavior
- {
- public:
- virtual void quack(){
- cout<<"no quack"<<endl;
- }
- };
- class duck
- {
- public:
- flybehavior *flys;
- quackbehavior *quacks;
- void swim(){
- cout<<"swim"<<endl;
- }
- void setfly(flybehavior *newflys)
- {
- flys=newflys;
- }
- void setquack(quackbehavior *newquack)
- {
- quacks=newquack;
- }
- void peformfly()
- {
- flys->fly();
- }
- void peformquack()
- {
- quacks->quack();
- }
- duck()
- {
- flys=NULL;
- quacks=NULL;
- }
- ~duck()
- {
- delete flys;
- delete quacks;
- }
- };
- class modelduck : public duck
- {
- public:
- modelduck(){
- flys=new Flynoway();
- quacks=new quackno();
- }
- };
- void main()
- {
- modelduck duckss;
- duckss.peformfly();
- duckss.peformquack();
- flybehavior *text=new Flywithwings();
- duckss.setfly(text);
- duckss.peformfly();
- }