您的位置:首页 > 编程语言 > C语言/C++

design_pattern_strategy

2015-03-04 11:08 489 查看
This post implement strategy pattern, described in <Head First Design Pattern>.
Strategy Pattern  defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it. The class structure is as follows



class FlyBehavior{
public:
virtual void fly() = 0;
};

class FlyWithWings : public FlyBehavior{
public:
virtual void fly(){
std::cout << "I am flying!" << std::endl;
}
};

class FlyNoWay : public FlyBehavior{
public:
virtual void fly(){
std::cout << "I cannot fly!" << std::endl;
}
};

class QuackBehavior{
public:
virtual void quack() = 0;
};

class Quack : public QuackBehavior{
public:
virtual void quack(){
std::cout << "Quack!" << std::endl;
}
};

class Suqeak : public QuackBehavior{
public:
virtual void quack(){
std::cout << "Quqeak!" << std::endl;
}
};

class MuteQuack : public QuackBehavior{
public:
virtual void quack(){
std::cout << "MuteQuack!" << std::endl;
}
};

class Duck{
protected:
FlyBehavior* fb;
QuackBehavior* qb;

public:
Duck(){
fb = NULL;
qb = NULL;
}

Duck(FlyBehavior* fb_, QuackBehavior* qb_){
fb = fb_;
qb = qb_;
};

Duck(const Duck& duck){
this->fb = duck.fb;
this->qb = duck.qb;
};

void operator=(const Duck& duck){
this->fb = duck.fb;
this->qb = duck.qb;
};

virtual void performQuack() const = 0;
virtual void performFly() const = 0;
virtual void display() const = 0;

void swim(){
std::cout << "Swimming!" << std::endl;
};

void setFlyBehavior(FlyBehavior* fb_){
fb = fb_;
}

void setQuackBehavior(QuackBehavior* qb_){
qb = qb_;
}

virtual ~Duck(){
delete qb;
delete fb;
fb = NULL;
qb = NULL;
}
};

class ModelDuck : public Duck{
public:
ModelDuck() : Duck(){}
ModelDuck(FlyBehavior* fb_, QuackBehavior* qb_){
fb = fb_;
qb = qb_;
}

void performQuack() const {
qb->quack();
}

void performFly() const {
fb->fly();
}

void display() const {
std::cout << "I am one model duck:)" << std::endl;
}
};


The main function is as follows

#include <iostream>
#include <memory>
#include <./duck.hpp>

int main(){
FlyNoWay* fb = new FlyNoWay();
MuteQuack* qb = new MuteQuack();

ModelDuck ducky = ModelDuck(fb, qb);
ducky.performFly();
ducky.performQuack();

delete fb;
fb = NULL;

delete qb;
qb = NULL;

return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ design pattern s