设计模式1 - 简单工厂模式

151 阅读2分钟

设计模式1 - 简单工厂模式

工厂模式介绍

工厂模式是java中最常用的设计模式之一,它属于创建型模式,它提供一种创建对象的最佳方式。在客户端创建对象的时候,不直接暴露对象的创建(直接new该类), 它通过一个共同的接口来指向新创建的对象。相当于把该对象封装在一个类里面,用最外层的类去得到被封装类的对象。

在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

模式结构

在简单工厂中,包含如下角色:

Factory:工厂角色

这个角色主要封装,创建所有实例的内部逻辑。

Product:抽象产品角色

它是所有对象的基类,主要负责描述所有实例所共有的公共接口。就是把共同的方法抽取出来。不同的子类去继承这个父类,根据不同的需求来自己实现公共方法的逻辑。

ConcreteProduct:具体产品角色

这个就是我们要的创建目标,根据不同的需求去创建不同的角色,去继承父类就行了。

下面是类图的表示:

根据不同的参数,就创建不同的实例对象。

代码

Factory:

public class Factory {

/**
 * 根据输入的名字来决定实例化哪个类
 * @param proName
 * @return
 */
public Product createProduct(String proName) {

    Product product = null;

    if ("A".equals(proName)) {
        product = new ConcreteProductA();
    } else if ("B".equals(proName)) {
        product = new ConcreteProductB();
    }

    return product;
}

} Product:

public abstract class Product {

 /**
  * 所有子类的共同方法,抽象出基类
  */
 protected abstract void comMethod();

} ConcreteProduct: 具体类A

/**

  • @author Stone

  • @version V1.0

  • @description: 具体的类A

  • @date 9/22/18 09:56

  • @email redsstone@163.com */ public class ConcreteProductA extends Product{

    @Override protected void comMethod() { System.out.println("具体的类:ConcreteProductA"); } } 具体类B

/**

  • @author Stone
  • @version V1.0
  • @description: 具体的类B
  • @date 9/22/18 09:57
  • @email redsstone@163.com */ public class ConcreteProductB extends Product{ @Override protected void comMethod() { System.out.println("具体的类:ConcreteProductB"); } } 测试代码

public class Test {

public static void main(String[] args) {
    Factory factory = new Factory();
    Product product = factory.createProduct("A");
    product.comMethod();
    product = factory.createProduct("B");
    product.comMethod();
}

}

-打印输出结果:

具体的类:ConcreteProductA 具体的类:ConcreteProductB 简单工厂模式的优点 可以根据不同的标示去实例不同的产品类型。客户端不负责创建对象的逻辑,一切都有工厂内部逻辑决定。

简单工厂模式的缺点 后续的扩展比较麻烦,如果需要额外新增产品,则需要在工厂中添加相应的判断。会造成if else 过多,不利于系统的扩展和维护。

参考链接:design-patterns.readthedocs.io/zh_CN/lates…

www.runoob.com/design-patt…