简单工厂模式:建立一个简单的工厂类,工厂类的静态成员方法接收一个参数来分辨返回何种类的实例
class Animal {
public:
virtual ~Animal() {};
virtual void dosomething() = 0;
};
class Cat : public Animal {
public:
void dosomething() {
cout << "我是一只小猫,喵" << endl;
}
};
class Dog :public Animal {
public:
void dosomething() {
cout << "我是一只小狗,汪" << endl;
}
};
class animalFactory {
public:
Animal* createAnimal(string kind) {
if (kind == "cat") {
return new Cat();
}
else if (kind == "dog") {
return new Dog();
}
else {
return nullptr;
}
}
};
工厂方法模式:是对简单工厂模式的一个升级,不再通过接受参数来返回需要的实例,而是给每个需要的实例实现一个对应的工厂类,再通过相应的工厂类返回所需实例
class Animal {
public:
virtual ~Animal() {};
virtual void dosomething() = 0;
};
class Cat : public Animal {
public:
void dosomething() {
cout << "我是一只小猫,喵" << endl;
}
};
class Dog :public Animal {
public:
void dosomething() {
cout << "我是一只小狗,汪" << endl;
}
};
class animalFactory {
public:
virtual Animal* createAnimal()=0;
};
class catFactory : public animalFactory {
public:
Cat* createAnimal() {
return new Cat();
}
};
class dogFactory : public animalFactory {
public:
Dog* createAnimal() {
return new Dog();
}
};
int main() {
catFactory* catfactory = new catFactory();
Cat* cat = catfactory ->createAnimal();
dogFactory* dogfactory = new dogFactory();
Dog* dog = dogfactory->createAnimal();
return 0;
}
抽象工厂模式:当类的种类很多且可以按某个属性将其中的几个类划分为一个类时,再使用工厂方法模式将会产生大量的工厂类,由此提出抽象工厂模式,一个工厂有多个成员函数来生成这一大类中的不同小类的实例
class Animal {
public:
virtual ~Animal() {};
virtual void dosomething() = 0;
};
class Cat : public Animal {
public:
void dosomething() {
cout << "我是一只小猫,喵" << endl;
}
};
class Dog :public Animal {
public:
void dosomething() {
cout << "我是一只小狗,汪" << endl;
}
};
class Factory {
public:
virtual Cat* createcat()=0;
virtual Dog* creatdog() = 0;
virtual ~Factory() {}
};
class animalFactory :Factory {
public:
Cat* createcat() {
return new Cat();
}
Dog* createdog() {
return new Dog();
}
};