您的位置:首页 > 其它

设计模式Before-after之工厂方法模式

2014-03-10 15:49 344 查看
before.cxx

#include <iostream>
#include <string>

class Apple {
public:
void sayHello(void) {
std::cout << "Hello, I'm a apple." << std::endl;
}
};

class Banana {
public:
void sayHello(void) {
std::cout << "Hello, I'm a banana." << std::endl;
}
};

class Pear {
public:
void sayHello(void) {
std::cout << "Hello, I'm a pear." << std::endl;
}
};

int main(void) {
Apple apple;
apple.sayHello();

// Banana banana;
// banana.sayHello();

// Pear pear;
// pear.sayHello();
return 0;
}

after.cxx

#include <iostream>
#include <string>
#include "config.hxx"

class Fruit {
public:
virtual void sayHello(void) = 0;
};

class Apple: public Fruit {
void sayHello(void) {
std::cout << "Hello, I'm a apple." << std::endl;
}
};

class Banana: public Fruit {
public:
void sayHello(void) {
std::cout << "Hello, I'm a banana." << std::endl;
}
};

class Pear: public Fruit {
public:
void sayHello(void) {
std::cout << "Hello, I'm a pear." << std::endl;
}
};

class FruitFactory {
public:
virtual Fruit *createFruit(void) = 0;
};

class AppleFactory: public FruitFactory {
public:
Fruit *createFruit(void) {
return new Apple();
}
};

class BananaFactory: public FruitFactory {
public:
Fruit *createFruit(void) {
return new Banana();
}
};

class PearFactory: public FruitFactory {
public:
Fruit *createFruit(void) {
return new Pear();
}
};

int main(void) {
FruitFactory *fruitFactory = &_FRUIT_FACTORY_();
Fruit *fruit = fruitFactory->createFruit();
fruit->sayHello();
delete fruit;
return 0;
}


config.hxx
#define _FRUIT_FACTORY_ AppleFactory

// #define _FRUIT_FACTORY_ BananaFactory

// #define _FRUIT_FACTORY_ PearFactory
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: