简单工厂模式详解

UML图

简单工厂模式的UML图如下:
简单工厂模式

解决问题

简单工厂模式解决了如何去实例化一个合适的对象。

核心思想

简单工厂模式的核心思想就是有一个专门的类(工厂类)负责创建实例的过程。
把产品看成是一系列类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类负责来生产一个合适的对象来满足用户的需求。

实现原则

如果简单工厂模式中所涉及到的具体产品之间没有共同的逻辑,那么就用接口来扮演抽象产品的角色;
如果有共同的属性和逻辑,就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体的产品继承抽象类。为了实现更好的复用,共同的东西应该抽象出来。
在实际运用中,抽象产品和具体产品之间往往是多层次的产品结构。如图:
实际运用

优点

能够根据外界给定的信息决定究竟应该创建哪个具体的类的对象。用户可以在使用时,直接根据工厂类去创建所需实例,而无需了解这些对象是怎么创建的,有利于软件体系的结构化。

缺点

由于工厂类集中了所有实例的创建逻辑,如果工厂类出现问题,所有的客户端都会受到牵连。
由于简单工厂模式是基于同一个抽象类或接口的,当产品种类增加时,有其他的抽象类或接口时,工厂类就必须判断何时创建何种种类的产品,违背了单一职责,导致系统丧失灵活性和可维护性。
更重要的是,简单工厂模式违背了“系统对扩展开发,对修改封闭”的原则,因为当新增加一个产品类时必须修改工厂类,相应的工厂类就需要重新编译。

小结

简单工厂模式分离了产品的创建者和消费者,有利于系统的结构的优化。不过由于所有产品类的实现都在一个工厂类中,导致没有很高的内聚性,同时也违背了“开-闭原则”。
另外,简单工厂模式的方法一般都是静态的,而静态的方法不能被子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。
在Android开发中,一般都定义一些简单的工具类,这些类可以视为简单工厂模式的一种实现。
其实严格意义上,简单工厂模式不算是一种设计模式,而是一种编程的习惯,把常用的方法集中到一个工具类中实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值