package com.mybatis.designpatterns.factory;
public class Add extends Operation {
public Double getResult(){
return getNumberA() + getNumberB();
}
}
package com.mybatis.designpatterns.factory;
public class Subtraction extends Operation{
public Double getResult(){
return getNumberA() - getNumberB();
}
}
package com.mybatis.designpatterns.factory;
public class Multiplication extends Operation {
public Double getResult(){
return getNumberA() * getNumberB();
}
}
package com.mybatis.designpatterns.factory;
import lombok.Data;
@Data
abstract class Operation { // 运算通用父类
private Double numberA;
private Double numberB;
public Double getResult(){
return 0D;
}
}
package com.mybatis.designpatterns.factory;
public class AddFactory implements CreateFactory{
@Override
public Operation createOperation() { // 加法工厂
return new Add();
}
}
package com.mybatis.designpatterns.factory;
public class SubtractionFactory implements CreateFactory { // 减法工厂
@Override
public Operation createOperation() {
return new Subtraction();
}
}
package com.mybatis.designpatterns.factory;
public class Multiplicationfactory implements CreateFactory { // 乘法工厂
@Override
public Operation createOperation() {
return new Multiplication();
}
}
package com.mybatis.designpatterns.factory;
public interface CreateFactory { // 抽象工厂类,
public Operation createOperation();
}
package com.mybatis.designpatterns.factory;
public class FactoryMain {
public static void main(String[] args) {
CreateFactory factory = new AddFactory();
Operation operation = factory.createOperation();
operation.setNumberA(10D);
operation.setNumberB(10D);
System.out.println(operation.getResult());
System.out.println("==============");
CreateFactory multiplicationfactory = new Multiplicationfactory();
Operation operation1 = multiplicationfactory.createOperation();
operation1.setNumberA(10D);
operation1.setNumberB(10D);
System.out.println(operation1.getResult());
}
}
简单工厂和工厂设计模式UML:
简单工厂:
工厂:
开放-封闭原则:
面对需求,对程序的改动是通过增加新的代码进行的,而不是更改现有的代码
感受:总体而言简单工厂和工厂模式最大区别是面对新需求的时候,工厂模式相对于简单工厂修改的代码更少;只需要在原有的业务逻辑上增加新的代码即可满足需求