一、思想圖

二、相比簡單工廠模式,實現了代碼的開閉原則。即原來在switch里每增加一個功能,就寫一個case,制造對象,而現在新增功能直接寫一個方法即可。
三、代碼
3.1抽取共同信息
package com.xx.bean;
/**
* 工廠方法模式——父類(抽取固定模塊)
* @author phoebe
*
*/
public class CaculateBean {
private double a;
private double b;
private double result;
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
}
3.2加法實現類/其他類類似
package com.xx.function;
import com.xx.bean.CaculateBean;
/**
* 加法類
* @author phoebe
*
*/
public class Caculate_AddImpl extends CaculateBean{
@Override
public double getResult() {
return this.getA()+this.getB();
}
}
3.3算數對象工廠
package com.xx.factory;
import com.xx.bean.CaculateBean;
import com.xx.function.Caculate_AddImpl;
import com.xx.function.Caculate_DivImpl;
import com.xx.function.Caculate_MultiImpl;
import com.xx.function.Caculate_SubImpl;
/**
* 算數對象工廠,新增功能時直接新增方法,方法和方法是隔離的,避免了修改原則
* @author phoebe
*
*/
public class BeanFactory{
//制造加法對象
public CaculateBean createAddBean() {
return new Caculate_AddImpl();
}
//制造減法對象
public CaculateBean createSubBean() {
return new Caculate_SubImpl();
}
//制造減法對象
public CaculateBean createMultiBean() {
return new Caculate_MultiImpl();
}
//制造減法對象
public CaculateBean createDivBean() {
return new Caculate_DivImpl();
}
}
3.4測試
package com.xx.test;
import com.xx.bean.CaculateBean;
import com.xx.factory.BeanFactory;
/**
* 測試類
* @author phoebe
*
*/
public class Caculate_Factory_method {
public static void main(String[] args) {
CaculateBean addBean = new BeanFactory().createAddBean();
addBean.setA(1);
addBean.setB(2);
System.out.println(addBean.getResult());
}
}
