美文网首页
设计模式之工厂方法模式

设计模式之工厂方法模式

作者: 正在加载更多 | 来源:发表于2018-08-26 16:46 被阅读0次

工厂方法模式------ Factory Method

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类

角色
  • 接口工厂类
  • 具体工厂类
  • 抽象产品类
  • 具体产品类
UML类图
工厂方法模式UML类图
代码
  • Operation.java
public abstract class Operation {
    private Long numberA;
    private Long numberB;
    public abstract long getResult();
    public Long getNumberA() {
        return numberA;
    }
    public void setNumberA(Long numberA) {
        this.numberA = numberA;
    }
    public Long getNumberB() {
        return numberB;
    }
    public void setNumberB(Long numberB) {
        this.numberB = numberB;
    }
}
  • AddOperation.java
public class AddOperation extends Operation {
    @Override
    public long getResult() {
        return getNumberA() + getNumberB();
    }
}

其他三个Operation类似

  • IFactoryMethod.java
public interface IFactoryMethod {
    Operation createOperation();
}
  • AddOperationFactory.java
public class AddOperationFactory implements IFactoryMethod {
    @Override
    public Operation createOperation() {
        return new AddOperation();
    }
}

其他三个工厂类似

  • ClientTest.java
public class ClientTest {
    public static void main(String[] args) {
        IFactoryMethod factoryMethod = new AddOperationFactory();
        Operation operation = factoryMethod.createOperation();
        operation.setNumberA(99L);
        operation.setNumberB(1L);
        System.out.println(operation.getResult());
    }
}
与简单工厂模式相比

简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖,但当需要在增加一个产品的时候,就需要去工厂类中加上一个相应的逻辑判断(利用反射实现的不需要)去生产一个产品,这说明简单工厂不但对拓展开放了,对修改也开放了。违背了开放-封闭原则!

优点
  • 1.隐藏了具体的创建产品的细节,客户端只需关心创建产品的工厂,甚至不需要知道具体产品的类名
  • 2.当想新增产品时,无需修改抽象工厂,也无需修改其他具体工厂和具体产品,只需增加一个对应的具体工厂和具体产品即可,提高了系统的可拓展性,符合"开闭原则"
缺点

添加新产品时,需要新增产品工厂与具体产品类,增加了系统的复杂性,

适用场景

一个类不知道他需要的对象的类名,只需要知道对应的工厂即可。

相关文章

网友评论

      本文标题:设计模式之工厂方法模式

      本文链接:https://www.haomeiwen.com/subject/qoxviftx.html