设计模式(Java版)-建立型模式之简单工厂模式

前言:这段时间在学习设计模式,本人也是小菜一枚(因此写的若是有错误的地方请大大们给予指出)。这个东西也是我一直想学习的,从点点滴滴作起,记录下本身天天的领悟!java

1、工厂模式的动机设计模式

  1. 在软件系统中,常常面临着“某个对象”的建立工做;因为需求的变化,这个对象常常面临着剧烈的变化,可是它却拥有比较稳定的接口。
  2. 如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其余依赖该对象的对象”不随着需求改变而改变?

2、不一样的工厂模式ide

  1. 简单工厂
  2. 工厂方法模式
  3. 抽象工厂

注:简单工厂:一个具体工厂经过条件语句建立多个产品,产品的建立逻辑集中与一个工厂类。客户端经过传不一样的参数给工厂,实现建立不一样产品的目的增长新产品时,须要修改工厂类、增长产品类,不符合OCP原则。学习

工厂方法:一个工厂建立一个产品,全部的具体工厂继承自一个抽象工厂。客户端先建立不一样产品的工厂,再由工厂建立具体产品,产品的建立逻辑分散在每一个具体工厂类中。客户端只依赖于抽象工厂与抽象产品,不依赖任何具体的工厂与具体产品增长新产品时,须要增长工厂类和产品类,符合OCP原则。优化

抽象工厂:一个具体工厂建立一个产品族,一个产品族是不一样系列产品的组合,产品的建立的逻辑分在在每一个具体工厂类中。全部的具体工厂继承自同一个抽象工厂。客户端建立不一样产品族的工厂,产品族的工厂建立具体的产品对客户端是不可见的。增长新的产品族时,须要增长具体工厂类,符合OCP原则。增长新产品时,须要修改具体工厂类和增长产品类,不符合OCP原则。若是没有应对“多系列对象建立”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂彻底能够。spa

3、简单工厂模式设计

  1. 解释:简单工厂模式是建立型模式,用于对象的建立,它不属于23种gof设计模式。它是工厂模式家族中最简单实用的模式,能够理解为是不一样工厂模式的一个特殊实现。
  2. 简单工厂模式的结构:
    模式的结构中包括的角色

    抽象产品(Product) code

    具体产品(ConcreteProduct) 对象

    构造者(Creator)blog

4、代码演示

这里我用的是一个这样的例子:用一个工厂来生产出不一样类型的窗体(记住为同类产品

一、在工厂模式中咱们首先考虑的应该是产品,由于产品为窗体,因此咱们抽象出的产品父类(即抽象产品Product)是全部窗体产品都有的特性 命名为Window.java对应的代码:

package com.java; /** * 抽象的窗体类 * * @author zhang * */
public abstract class Window { // 抽象的方法
    public abstract void funct(); }

二、父级的产品写完之后就是考虑不一样型号的同类(具体产品ConcreteProduct)产品了分别为WindowBig.java和WindowSmall.java

WindowBig.java对应的代码:

package com.java; /** * 具体产品的类(大窗体) * @author zhang * */
public class WindowBig extends Window { @Override public void funct() { System.out.println("大窗体建立成功"); } }

WindowSmall.java对应的代码:

package com.java; /** * 具体产品类(小窗体) * @author zhang * */
public class WindowSmall extends Window { @Override public void funct() { System.out.println("小窗体建立成功"); } }

三、当产品写完后就应该是对就的生产产品的工厂类(构造者Creator)了Factory.java

package com.java; /** * 生产产品的工厂类 * * @author zhang * */
public class Factory { // 建立窗体的方法
    public Window CreateWidow(String type) { if ("big".equals(type)) { return new WindowBig(); } else if ("small".equals(type)) { return new WindowSmall(); } else { return new WindowBig(); } } }

注:简单工厂最重要的就是Create方法,根据传入的字符来生产不一样的对象(利用java的多态来实现)。

5、简单工厂模式优缺点

优势:简单工厂模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个常常变化的具体类型,紧耦合关系会致使软件的脆弱。经过使用工厂类,外界能够从直接建立具体产品对象的尴尬局面摆脱出来,仅仅须要负责“消费”对象就能够了。而没必要管这些对象究竟如何建立及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点:因为工厂类集中了全部实例的建立逻辑,违反了高内聚责任分配原则,将所有建立逻辑集中到了一个工厂类中;它所能建立的类只能是事先考虑到的,若是须要添加新的类,则就须要改变工厂类了。

适合应用的场景:

  • 工厂类负责建立的对象比较少
  • 客户只知道传入工厂类的参数,对于如何建立对象(逻辑)不关心
  • 因为简单工厂很容易违反高内聚责任分配原则,所以通常只在很简单的状况下应用
相关文章
相关标签/搜索