c++ 工厂模式

#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;
}

你可能感兴趣的:(C++,类,库)