求批评,我刚开始看Headcall First设计模式
菜鸟一名,以前浪费了很多时间。刚开始看书,写了一个小程序。就是它有关Duck的说明,我也不知道这个是什么模式。我自己觉得写的很不优雅,虽然能正常输出。比如该用接口也就是抽象类,结果我不会弄。而且用了很多指针。
.h文件
class FlyBehavior//这里想用抽象类,感觉才规范。可是不知道该如何弄{public: FlyBehavior(void){}; virtual ~FlyBehavior(void){}; virtual void fly(void){};};class QuackBehavior//这里想用抽象类,感觉才规范。可是不知道该如何弄{public: QuackBehavior(void){}; virtual ~QuackBehavior(void){}; virtual void quack(void){};};class FlyWithWings : public FlyBehavior{public: FlyWithWings(){}; void fly(){cout<<"I can fly with wings!"<<endl;};};class FlyNoWay : public FlyBehavior{public: FlyNoWay(){}; void fly(){cout<<"I can't fly any way."<<endl;};};class Quack : public QuackBehavior{public : Quack(){}; void quack(){cout<<"I can quack!"<<endl;};};class Squeak : public QuackBehavior{public: Squeak(){}; void quack(){cout<<"I can squeak"<<endl;};};class Duck{public: Duck(void); ~Duck(void); FlyBehavior* flyBehavior;//这里觉得似乎不该用指针 QuackBehavior* quackBehavior; void performQuack(); void performFly(); void setFlyBehavior(FlyBehavior* f); void setQuackBehavior(QuackBehavior* q);};class MallardDuck : public Duck{public : MallardDuck() { this->flyBehavior = new FlyWithWings(); this->quackBehavior = new Squeak(); }};
Duck::Duck(void){}Duck::~Duck(void){}void Duck::performFly(){ this->flyBehavior->fly();}void Duck::performQuack(){ this->quackBehavior->quack();}void Duck::setFlyBehavior(FlyBehavior* f){ this->flyBehavior = f;}void Duck::setQuackBehavior(QuackBehavior* q){ this->quackBehavior = q;}
int _tmain(int argc, _TCHAR* argv[]){ Duck* myDuck = new MallardDuck(); myDuck->performQuack(); myDuck->performFly(); Duck* model = new ModelDuck(); model->performFly(); model->setFlyBehavior(new FlyWithWings());//题外话,这里new出来的东西,怎么delete呢? model->performFly(); return 0;}
I can squeakI can fly with wings!I can't fly any way.I can fly with wings!
class MallardDuck : public Duck{public : MallardDuck() { this->flyBehavior = new FlyWithWings(); // 在析构函数里要delete flyBehavior this->quackBehavior = new Squeak(); // 在析构函数里要delete quackBehavior }};
[解决办法]