#include <iostream>
using namespace std;
//飞行方式
class Flybehavior
{
public :
virtual void Fly() = 0;
};
class SubsonicFly : public Flybehavior
{
public :
void Fly()
{
cout << "SubsonicFlyBehavior" << endl;
}
};
class SupersonicFly : public Flybehavior
{
public :
void Fly()
{
cout << "SupersonicFlyBehavior" << endl;
}
};
//起飞方式
class Takeoffbehavior
{
public :
virtual void Takeoff() = 0;
};
class Vertical : public Takeoffbehavior
{
void Takeoff()
{
cout << "VerticalTakeoffbehavior" << endl;
}
};
class Longdistance : public Takeoffbehavior
{
void Takeoff()
{
cout << "LongdistanceTakeoffbehavior" << endl;
}
};
//飞机基类和派生类
class Aircraft
{
protected :
Flybehavior *f;
Takeoffbehavior *to;
public :
virtual void Fly() = 0;
virtual void Takeoff() = 0;
};
class Airplane : public Aircraft
{
public :
Airplane(Flybehavior *f,Takeoffbehavior *to)
{
this->f = f;
this->to = to;
}
void Fly()
{
f->Fly();
}
void Takeoff()
{
to->Takeoff();
}
};
class Helicopter : public Aircraft
{
public :
Helicopter(Flybehavior *f,Takeoffbehavior *to)
{
this->f = f;
this->to = to;
}
void Fly()
{
f->Fly();
}
void Takeoff()
{
to->Takeoff();
}
};
class Fighter : public Aircraft
{
public :
Fighter(Flybehavior *f,Takeoffbehavior *to)
{
this->f = f;
this->to = to;
}
void Fly()
{
f->Fly();
}
void Takeoff()
{
to->Takeoff();
}
};
int main()
{
SubsonicFly *ps = new SubsonicFly();
Longdistance *pt = new Longdistance();
Aircraft *p = new Airplane(ps,pt);
p->Fly();
p->Takeoff();
return 0;
}