大话设计模式 读书笔记之 简单工厂模式

什么是简单工厂模式:

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式,属于类的创建型模式。

使用场景:

  1. 需要根据不同的Type处理不同的逻辑的地方,都可以使用(如直播中同一个消息有不同的消息类型,需要创建不同的处理方式等);
  2. 取代if-else(也就是effective java里面说的标签类,充满各种的if-else),当需求更改时,需要更改if-else里面的内容,扩展性差,而简单工厂模式,把处理方式抽象成接口,工厂内部处理切换逻辑,更改时只需加上case和新类即可,不修改原来的逻辑;

引用
Effective 第四章 类与接口

类层次优于标签类

举例说明:

需要做一个计算器,实现加减乘除的算法

以下是简单工厂模式点实现

public class FactoryDesign {
  public Operation createOperation(Operator operator) {// 这里可以优化成泛型或者Android里面的@IntDef
    Operation operation = null;
    switch (operator) {
      case ADD:
        operation = new AddOperation();
        break;
      case SUB:
        operation = new SubOperation();
        break;
      case MUL:
        operation = new MulOperation();
        break;
      case DIV:
        operation = new DivOperation();
        break;
    }
    return operation;
  }

  public enum Operator {
    ADD,
    SUB,
    MUL,
    DIV;
  }
}

项目中的应用:

  1. 直播中消息列表:一条消息不同的Type对应不同的处理逻辑和样式(警告,聊天,全局广播,礼物.....)
  2. 开启游戏:一个GameID对应不同的游戏fragment
  3. 消息推送,不同的消息类型做不同的处理(打开App首页,跳转H5,跳转个人主页)

使用方法:

  1. 创建公共接口,提取各实例的通用处理方法;
  2. 创建各实例继承该接口,实现各自的处理逻辑;
  3. 创建工厂类,提供创建实例的方法,客户端传入类型参数,工厂类根据具体的类型创建不同的实例;

优点:

  1. 需要增加新的类型只需要增加新的实例类即可,工厂封装了具体的实现细节,逻辑清晰
  2. 责任分离,符合单一职责原则,后期扩展性强;

缺点:

  1. 工厂类的职责过大,每次增加新的类型需要修改工厂类,不符合开闭原则(对扩展开放,对修改关闭)
  2. 当类型较多时,工厂类泛滥,难以管理(可以用抽象工厂解决)

你可能感兴趣的:(大话设计模式 读书笔记之 简单工厂模式)