Java 深入探究讲解简单工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现

1. 简单工厂介绍

简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。

注意:简单工厂模式 不属于23种设计模式之列

2. 简单工厂类图UML

img

3. 简单工厂角色说明

简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象。

抽象产品(Product):是简单工厂创建所有对象的父类,负责描述所有实例公有的公共接口

具体产品(ConcreteProduct):是简单工厂创建的具体对象

4. 代码实现

简单工厂实现:

/** * 抽象产品,提供所有具体产品的共有的方法 */ public interface Product { public void show(); } ​ /** * 具体产品1 */ public class ConcreteProduct1 implements Product { @Override public void show() { System.out.println("具体产品1展示..."); } } ​ ​ /** * 具体产品2 */ public class ConcreteProduct2 implements Product { @Override public void show() { System.out.println("具体产品2展示..."); } } ​ /** * 简单工厂 */ public class SimpleFactory { //提供一个方法,基于不同的参数获取不同的实例对象 public static Product getConcreteProduct(int productType) { switch (productType) { case Const.Product1: return new ConcreteProduct1(); case Const.Product2: return new ConcreteProduct2(); case Const.Product3: return new ConcreteProduct3(); } return null; } ​ ​ final class Const { static final int Product1 = 1;//表示是ConcreteProduct1产品 static final int Product2 = 2;//表示是ConcreteProduct2产品 static final int Product3 = 3;//表示是ConcreteProduct3产品 } 

调用方式:

        //获取产品1 Product product = SimpleFactory.getConcreteProduct(Const.Product1); product.show(); //获取产品2 Product product1 = SimpleFactory.getConcreteProduct(Const.Product2); product1.show();

使用步骤:

  • 创建抽象产品类和定义具体产品的公共接口
  • 创建具体产品类,定义生产的具体产品
  • 创建工厂类,通过创建静态方法根据传入不同的参数从而创建不同的具体产品的实例
  • 外界通过调用工厂类的静态方法,传入不同的参数创建不同的产品实例

5. 优缺点

优点:

  • 代码逻辑比较简单,工厂类包含必要的创建对象的逻辑,可以决定创建具体的产品
  • 调用方无需指导所创建具体产品的类名,只需要知道参数即可

缺点:

  • 简单工厂违背开闭原则,工厂类负责产品的创建职责过重,一旦新增产品需要对工厂类内部逻辑新增判断
  • 系统扩展困难,产品过多会造成逻辑过于复杂

6. 使用场景

对于产品种类比较少的情况,可以考虑使用简单工厂,调用方只需要传入工厂类的参数,不需要关注如何创建的逻辑.

到此这篇关于Java 深入探究讲解简单工厂模式的文章就介绍到这了,更多相关Java 简单工厂模式内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

以上就是Java 深入探究讲解简单工厂模式的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java