设计模式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
#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
相关文章推荐
- 设计模式Before-after之简单工厂模式
- Scala设计模式Part I. 创建模式——3.工厂方法
- 【初学设计模式】Factory Method (工厂方法)
- 设计模式:工厂方法和抽象工厂
- 设计模式之工厂方法
- 【设计模式】之 透过工厂方法看 抽象类和接口
- 23种设计模式之工厂方法模式
- 学习设计模式:简单工厂、模板方法、单例(上)
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- C++设计模式-工厂方法
- 从FLC中学习的设计模式系列-创建型模式(3)-工厂方法
- Java设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)
- 23种设计模式之工厂方法模式
- 工厂方法设计模式
- 【设计模式】 工厂方法
- 重头开始学23种设计模式:三大工厂(简单工厂,工厂方法,抽象工厂)
- 设计模式之工厂方法模式
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别