纸上得来终觉浅,看一遍没啥感觉。重新用C++写一遍有一点点感觉。记下来慢慢看,希望有更多感觉。。。
1、类说明
Duck 鸭子接口;
RedHeadDuck鸭子种类之一,继承于Duck
RubberDuck鸭子种类之一,继承于Duck
FlyBehavior 飞行行为类,
FlyWithWings 飞行行为之一,继承于FlyBehavior;
FlyNoWay 飞行行为之一,继承于FlyBehavior;
QuackBehavior 叫声行为类
Quack叫声行为之一,继承于QuackBehavior;
Squeak叫声行为之一,继承于QuackBehavior;
代码:
#include<iostream>
using namespace std;
//飞行行为类
class FlyBehavior
{
public:
FlyBehavior::FlyBehavior()
{
}
virtual void fly()
{
}
};
class FlyWithWings : public FlyBehavior
{
public:
void fly()
{
cout << "我会飞..." <<endl;
}
};
class FlyNoWay : public FlyBehavior
{
public:
void fly()
{
cout << "我不会飞..." <<endl;
}
};
//尖叫行为类
class QuackBehavior
{
public:
virtual void quack()
{
}
};
class Quack : public QuackBehavior
{
public:
void quack()
{
cout << "我会呱呱叫..." <<endl;
}
};
class Squeak : public QuackBehavior
{
public:
void quack()
{
cout << "我不会叫..." <<endl;
}
};
//鸭子类
class Duck
{
public:
FlyBehavior* flybehavior;
QuackBehavior* quackBehavior;
void performQuack()
{
quackBehavior->quack();
}
void performBehavior()
{
flybehavior->fly();
}
virtual void display() = 0;
};
class RedHeadDuck : public Duck
{
public:
RedHeadDuck::RedHeadDuck()
{
flybehavior = new FlyWithWings();
quackBehavior = new Quack();
}
void display()
{
cout << "我是红头鸭..." <<endl;
}
RedHeadDuck::~RedHeadDuck()
{
delete flybehavior;
delete quackBehavior;
}
};
class RubberDuck : public Duck
{
public:
RubberDuck::RubberDuck()
{
flybehavior = new FlyNoWay();
quackBehavior = new Squeak();
}
void display()
{
cout << "我是橡皮鸭..." <<endl;
}
RubberDuck::~RubberDuck()
{
delete flybehavior;
delete quackBehavior;
}
};
int main()
{
Duck* duckA;
duckA = new RedHeadDuck();
duckA->display();
duckA->performBehavior();
duckA->performQuack();
cout << "..............."<<endl;
delete duckA;
duckA = new RubberDuck();
duckA->display();
duckA->performBehavior();
duckA->performQuack();
getchar();
return 0;
}
每个鸭子都有具体的行为方式,Duck有表现行为方法performQuack(),performBehavior(),具体的行为动作由FlyBehavior的子类的方法决定。
Duck的变量flybehavior和quackBehavior在不同的子类中指向不同的行为类型。使得子类成为具体行为模式的决定者。
策略模式:
定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
《Head First 设计模式》
参考资料:http://www.cnblogs.com/wanggary/archive/2011/04/07/2008796.html