工廠方法模式_計算器實現


一、思想圖

 

 

二、相比簡單工廠模式,實現了代碼的開閉原則。即原來在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());
		
	}
	
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM