欢迎转载http://blog.csdn.net/Passi_zxj/article/details/52751969
简介
- 简单工厂模式又叫静态工厂方法(Static Factory Method)模式
- 简单工厂模式不属于23种Gof设计模式之一
- 属于创建型模式
背景
你希望程序能根据具体的情况构造出具体的对象,比如你有一个animal指针,如果这个animal是cat,程序应该实例化cat对象,等等。。因此,你需要:
- 父类(保存实例化后的子类对象)
- 工厂类(包含一个超大的switch去负责构造出相应的子类)
一言以蔽之
利用switch去决定生产什么样的子类,保存在父类指针里面
class Animal
{
public:
virtual void sayHi() = 0 ;
};
class AnimalCat :Animal
{
publci:
void sayHi() override
{
printf("I am a cat...\n");
}
};
// class AnimalDog
//...
class AnimalFactory
{
public static Animal createAnimal(string sType)
{
Animal *animal = null ;
switch(sType)
{
case "cat":
animal = new AnimalCat() ;
break ;
case "dog":
animal = new AnimalDog() ;
break ;
...
}
return animal ;
}
}
review
简单工厂模式利用工厂类使得使用类的人不用去关心怎么创建这个类(这个交给工厂类去完成了),这个想法很好,有利于明确各自分工,但是,你这个大switch有点不靠谱吧,万一人家有好多个子类呢?
advantage
- 工厂类的想法使得类的使用着不用去关心类的创建问题,明确了使用者和创建者的职责,有利于系统的优化。
disadvantage
- 所有的实例都在工厂里面创建,违反了高内聚责任分配原则
使用场合
- 需要实例化的对象比较少
- 因为违反了高内聚的原则,所以在简单的情况下可以使用,前提是你能hold住(废话。。)
Tips
- 下一篇就更新工厂方法可以比较学习,据说有些缺点在工厂模式中得到了一些改善哦