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:
簡單工廠:
工廠:
開放-封閉原則:
面對需求,對程序的改動是通過增加新的代碼進行的,而不是更改現有的代碼
感受:總體而言簡單工廠和工廠模式最大區別是面對新需求的時候,工廠模式相對於簡單工廠修改的代碼更少;只需要在原有的業務邏輯上增加新的代碼即可滿足需求