#ifndef Animal_hpp #define Animal_hpp #define CC_SYNTHESIZE(varType, varName, funName)\ protected: varType varName ;\ public: virtual varType get##funName(void) const { return varName; }\ public: virtual void set##funName(varType var){ varName = var; } #include <stdio.h> #include <iostream> using namespace std; class Animal { public: Animal() {}; ~Animal() {}; CC_SYNTHESIZE(string, type, Type); virtual void say(); }; #endif /* Animal_hpp */
#include "Animal.hpp" void Animal::say() { printf("我是动物\n"); }
#ifndef Cat_hpp #define Cat_hpp #include <stdio.h> #include "Animal.hpp" class Cat: public Animal { public: Cat() {}; ~Cat() {}; virtual void say(); }; #endif /* Cat_hpp */
#include "Cat.hpp" void Cat::say() { printf("Cat say\n"); }
#ifndef Dog_hpp #define Dog_hpp #include <stdio.h> #include "Animal.hpp" class Dog:public Animal { public: Dog() {}; ~Dog() {}; virtual void say(); }; #endif /* Dog_hpp */
#include "Dog.hpp" void Dog::say() { printf("Dog say\n"); }
#ifndef Creater_hpp #define Creater_hpp #include <stdio.h> #include "Animal.hpp" class Creater { public: Creater() {}; ~Creater() {}; Animal* createDog(); Animal* createCat(); CC_SYNTHESIZE(Animal*, dog, Dog); CC_SYNTHESIZE(Animal*, cat, Cat); }; #endif /* Creater_hpp */
#include "Creater.hpp" #include "Cat.hpp" #include "Dog.hpp" Animal* Creater::createCat() { if (!cat) { cat = new Cat(); } return cat; } Animal* Creater::createDog() { if (!dog) { dog = new Dog(); } return dog; }以下就是普通的工厂模式调用
#include <iostream> #include "Creater.hpp" #include "Cat.hpp" #include "Dog.hpp" #include "Animal.hpp" int main(int argc, const char * argv[]) { // insert code here... std::cout << "Hello, 工厂!\n"; Creater *creater = new Creater(); creater->createCat()->say(); creater->createDog()->say(); return 0; }