简单工厂模式

  • 工厂类用来创建对象
  • 根据传入的参数不同返回不同的产品

结构

  • 工厂类
  • 抽象产品
  • 具体产品类

    代码

    `java
    package com.liuzhihang.demo.factory;

/**

  • 简单的工厂模式
    *
  • @author liuzhihang
  • @date 2018/3/23 17:45
    */
    public class SimpleFactoryPattern {

    public static void main(String[] args) {

     Product product = Factory.getProduct("A");
     product.diffFunction();
     product.sameFunction();
    

    }

}

/**

  • 工厂类
    */
    class Factory {

    public static Product getProduct(String productName) {

     Product product = null;
    
     if ("A".equals(productName)) {
         product = new SubProductA();
     }
     if ("B".equals(productName)) {
         product = new SubProductB();
     }
     return product;
    

    }
    }

/**

  • 产品父类 抽象方法或接口
    */
    abstract class Product {

    public void sameFunction() {

     System.out.println("所有产品的公共处理流程");
    

    }

    /**

    • 功能不同的抽象方法
      */
      abstract void diffFunction();

}

class SubProductA extends Product {

@Override
void diffFunction() {

    System.out.println("子产品A的方法");
}

}

class SubProductB extends Product {

@Override
void diffFunction() {

    System.out.println("子产品B的方法");
}

}


### 执行结果
```java
D:\jdk1.8\bin\java ...
子产品A的方法
所有产品的公共处理流程

Process finished with exit code 0

总结

优点:

(1) 对象创建和使用分离, 可以决定创建实例的时机
(2) 通过判断参数来创建实例, 方便记忆
(3) 可以通过修改传入参数从而改变生成的实例

缺点:

(1) 所有产品创建相对集中, 容易导致集体发生问题
(2) 会增加系统中类的个数, 增加了系统的复杂度和理解难度
(3) 不利于扩展和维护, 每次增加新产品都需要修改新增判断逻辑
(4) 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构

适用场景:

(1) 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
(2) 客户端只知道传入工厂类的参数,对于如何创建对象并不关心


   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

评论