简单工厂模式详解

UML图

简单工厂模式的UML图如下:
简单工厂模式详解_第1张图片

解决问题

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

核心思想

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

实现原则

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

优点

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

缺点

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

小结

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

你可能感兴趣的:(设计模式,工厂模式)