第一篇 设计模式之简单工厂模式

欢迎转载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

  • 下一篇就更新工厂方法可以比较学习,据说有些缺点在工厂模式中得到了一些改善哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值