//fly.h
#ifndef ORDER_H
#define ORDER_H
#include <QLabel>
class FlyBehavior
{
public:
FlyBehavior(){}
~FlyBehavior(){}
virtual QSharedPointer<QLabel> fly() = 0;
};
class RocketFly : public FlyBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
RocketFly(){}
~RocketFly(){}
virtual QSharedPointer<QLabel> fly()
{
lb.reset(new QLabel("로켓엔진으로 난다!"));
return lb;
}
};
class WingFly : public FlyBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
WingFly(){}
~WingFly(){}
virtual QSharedPointer<QLabel>fly()
{
lb.reset(new QLabel("날개로 난다!"));
return lb;
}
};
class CantFly : public FlyBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
CantFly(){}
~CantFly(){}
virtual QSharedPointer<QLabel>fly()
{
lb.reset(new QLabel("못날아 ㅠㅠ"));
return lb;
}
};
#endif // ORDER_H
//quack.h
#ifndef QUACK_H
#define QUACK_H
#include <QLabel>
class QuackBehavior
{
private:
public:
QuackBehavior(){}
~QuackBehavior(){}
virtual QSharedPointer<QLabel> quack() = 0;
};
class Quack : public QuackBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
Quack(){}
~Quack(){}
virtual QSharedPointer<QLabel> quack()
{
lb.reset(new QLabel("꽉!!"));
return lb;
}
};
class Puack : public QuackBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
Puack(){};
~Puack(){}
virtual QSharedPointer<QLabel>quack()
{
lb.reset(new QLabel("퐉!!! 퐉!!!"));
return lb;
}
};
class CantQuack : public QuackBehavior
{
private:
QSharedPointer<QLabel>lb;
public:
CantQuack(){}
~CantQuack(){}
virtual QSharedPointer<QLabel>quack()
{
lb.reset(new QLabel("못울어 ㅠㅠ!"));
return lb;
}
};
#endif // QUACK_H
//duck.h
#ifndef DUCK_H
#define DUCK_H
#include "fly.h"
#include "quack.h"
class Duck
{
private:
QSharedPointer<QuackBehavior>quack;
QSharedPointer<FlyBehavior>fly;
public:
virtual QSharedPointer<QPixmap> Display() =0;
QSharedPointer<QLabel> Swim()
{
return QSharedPointer<QLabel>(new QLabel("헤엄침"));
}
QSharedPointer<QLabel> performQuack()
{
return quack->quack();
}
QSharedPointer<QLabel> perfromFly()
{
return fly->fly();
}
void setFlyBehavior(QSharedPointer<FlyBehavior>fly)
{this->fly = fly;}
void setQuackBehavior(QSharedPointer<QuackBehavior>quack)
{this->quack = quack;}
};
class YellowDuck : public Duck
{
private:
public:
virtual QSharedPointer<QPixmap> Display()
{
return QSharedPointer<QPixmap>(new QPixmap("c:\\qt_image\\Yellow_Duck.jpg"));
}
};
class BlueDuck : public Duck
{
private:
public:
virtual QSharedPointer<QPixmap> Display()
{
return QSharedPointer<QPixmap>(new QPixmap("c:\\qt_image\\Blue_Duck.jpg"));
}
};
class WoodDuck : public Duck
{
private:
public:
virtual QSharedPointer<QPixmap> Display()
{
return QSharedPointer<QPixmap>(new QPixmap("c:\\qt_image\\Wood_Duck.jpg"));
}
};
class ModelDuck : public Duck
{
private:
public:
virtual QSharedPointer<QPixmap> Display()
{
return QSharedPointer<QPixmap>(new QPixmap("c:\\qt_image\\Model_Duck.jpg"));
}
};
#endif // DUCK_H