//============================================================================
// Name : strategy_pattern.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
class InterfaceFly
{
public:
virtual void fly()=0;
};
class InterfaceQuack
{
public:
virtual void quack()=0;
};
class Duck
{
public:
InterfaceFly *instance_fly;
InterfaceQuack *instance_quack;
void swim();
void setFly(InterfaceFly *p){instance_fly=p;}
void setQuack(InterfaceQuack *p){instance_quack=p;}
void performFly(){instance_fly->fly();}
void performQuack(){instance_quack->quack();}
};
class FlyNoWing: public InterfaceFly
{
public:
void fly(){cout<<"I can't fly\n";}
};
class FlyWithWing: public InterfaceFly
{
public:
void fly(){cout<<"I'm flying\n";}
};
class Quack: public InterfaceQuack
{
public:
void quack(){cout<<"I'm quacking\n";}
};
class MuteQuack: public InterfaceQuack
{
public:
void quack(){cout<<"I can't quack\n";}
};
class MalaDuck: public Duck
{
public:
MalaDuck(){
instance_fly = new FlyWithWing();
instance_quack = new MuteQuack();
}
};
class SalaDuck: public Duck
{
};
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
Duck *maladuck = new MalaDuck();
maladuck->performFly();
maladuck->performQuack();
maladuck->setFly(new FlyNoWing());
maladuck->performFly();
return 0;
}
设计模式:strategy
最新推荐文章于 2025-09-05 15:44:31 发布
