Java与模式第十二章读书笔记

第十二章 简单工厂模式(Simple Factory)

  1. 概念
    简单工厂又叫静态工厂方法模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态的决定将哪一个类实例化,不必实现知道每次要实例化哪一个类。
  2. 工厂模式的的几种形态
    1)简单工厂模式又称静态工厂方法模式
    2)工厂模式:又称多态性工厂模式/虚拟构造子模式
    3)抽象工厂模式:又称工具箱模式
  3. 简单工厂模式的结构
    简单工厂模式是类的创建模式,这个模式的一般性结构如下图所示:Java与模式第十二章读书笔记
    其中:
    工厂类角色:是工厂方法模式的核心,含有与应用紧密相关的业务逻辑。往往由一个具体的Java类实现。
    抽象产品角色:这个类是工厂方法模式所创建的对象的父亲或他们共同拥有的接口,一般来说是一个Jva接口或者JAVA抽象类实现
    具体产品角色:工厂方法模式创建的任何对象都是具体产品角色。
  4. 每个工厂类可以有多个工厂方法,分别负责创建不同的产品对象。
  5. 如果系统仅有一个具体产品角色的话,那么久可以省略掉抽象产品角色。
    Java与模式第十二章读书笔记
  6. 循环使用工厂模式对象
    如果工厂方法总是循环使用同一个产品对象,那么这个工厂对象可以使用-一个属性来存储这个产品对象。每一次客户端调用工厂方法时,工厂方法总是提供这同一一个对象。在单例模式中就是这样,单例类提供.一个静态工厂方法,向外界提供-一个惟一的 单例类实例。
  7. 其他模式与简单工厂模式的关系
    1)单例模式:单例模式也是使用了简单工厂模式,单例类具有一个静态工厂方法提供自身的实例,一个抽象产品类同时是子类的工厂。单例模式要求单例类的构造子是私有的,从而客户端不能直接实例对象,必须通过这个静态工厂方法实例对象,而且单例类自身就是自己的工厂角色。
    2)多例模式:是单例模式的推广,单例模式与多例模式的共同之处在于他们都禁止外界直接实例化对象,同时通过静态工厂方法向外界提供循环使用自己身的实例。不同之处在于单例只有一个实例。多利模式往往有一个聚集属性,通过向这个聚集属性登记已经创建过的实例达到循环使用实例的目的。
    3)备忘录实例:
    单例模式和多例模式使用一个属性或者聚集属性来登记所创建的产品对象,以便可以通过查询这个属性或者聚集属性找到并共享已经创建了的产品对象,这就是备忘录模式的应用。备忘录模式的简略类图如下图所示。Java与模式第十二章读书笔记
    4)MVC模式:简单工厂模式所创建的对象往往属于一个产品等级结构,这个等级结构可以是MVC模式中的视图(View), 而工厂角色本身可以是控制器(Controller)。 一个MVC模式可以有一个控制器和多个视图,如下图所示。
    Java与模式第十二章读书笔记
    换言之,控制器端可以创建合适的视图端,就如果工厂角色创建合适的对象角色一样;而模型端则可以充当这个创建过程的客户端。如果系统由多个控制器参与这个过程的话,简单工厂模式就不适合了。
  8. 简单工厂模式的优缺点:
    优点:模式的核心是工厂类。这个类含有byao的判断逻辑,可以在什么时候创建哪一个产品类的实例。而客户端则可以免除直接创建产品对象的责任,而仅仅负责消费产品。简单工厂模式实现了对责任的分割。
    缺点:工厂类集中了所有产品创建逻辑,如果他挂了,整个工厂就挂了。简单工厂模式使用静态方法作为工厂方法,而静态方法无法由子类继承,所以无法形成基于继承的等级结构。工厂类把多个产品创建逻辑放在一起,使得系统扩展性较差。