test.h
#ifndef _TEST_H
#define _TEST_H
#include <iostream>
class FlyBehavior
{
public:
virtual void fly() = 0;
};
class FlyWithWings:public FlyBehavior
{
public:
void fly()
{
std::cout<<"I'am flying"<<std::endl;
}
};
class FlyNoWay:public FlyBehavior
{
public:
void fly()
{
std::cout<<"I can't flying"<<std::endl;
}
};
class FlyRocketPowered:public FlyBehavior
{
public:
void fly()
{
std::cout<<"I'mm flying with a rocket"<<std::endl;
}
};
class Duck
{
public:
Duck(){}
void performFly()
{
flyBehavior->fly();
}
void swim()
{
std::cout<<"All ducks float,even decoys!"<<std::endl;
}
void setFlyBehavior(FlyBehavior* fb)
{
flyBehavior = fb;
}
protected:
FlyBehavior* flyBehavior;
};
class MallardDuck:public Duck
{
public:
MallardDuck(){
flyBehavior = new FlyWithWings();
}
void display()
{
std::cout<<"I'm a real Mallard Duck"<<std::endl;
}
};
class ModelDuck:public Duck{
public:
ModelDuck(){
flyBehavior = new FlyNoWay();
}
void display(){
std::cout<<"I'm a model duck"<<std::endl;
}
};
class MiniDuckSimulator
{
public:
void main()
{
Duck* mallard = new MallardDuck();
mallard->performFly();
delete mallard;
mallard = nullptr;
Duck* model = new ModelDuck();
model->performFly();
model->setFlyBehavior(new FlyRocketPowered());
model->performFly();
delete model;
model = nullptr;
}
};
#endif
test.cpp
#include "test.h"
#include <iostream>
using namespace std;
int main()
{
MiniDuckSimulator* sim = new MiniDuckSimulator();
sim->main();
return 0;
}