1. 程式人生 > >行為型模式之模板方法模式(java版)

行為型模式之模板方法模式(java版)

1.引入

模板方法模式就是當我們需要把某些細節層次,但器個別步驟的更詳細的實現卻是不同的時候,就需要用模板方法模式。實際上就是把一些更詳細的資訊在子類中去實現,這裡更詳細的資訊就是可變的資訊,因為每個子類都不同,所以具有可變資訊,然後把不變的行為給他封裝到父類中去,這樣就去除子類中重複的程式碼了。

2.舉例

一般我們做系統時都是照著軟體工程的思想,就是先做需求分析,然後概要設計,然後詳細設計,然後編碼,測試,釋出這幾個步驟,雖然每個系統都不一樣,但是我們的工作流程是不變的,只是步驟中某個細節可能會是不同的,如需求分析,不同的系統功能,需求分析肯定是不同的。在工作流程上是不變,而其細節上更詳細的設計是可變的,我們就採用模板方法模式。對於不同的系統都採用這個工作流程這套模板來設計。

3.實現

--3.1設計流程模板類:

//就是從需求分析到釋出系統的一套設計流程
public abstract class DesignCycle {

	public abstract void needAnalysis();
	
	public abstract void conceptualDesign();
	
	public abstract void detailedDesign();
	
	public abstract void coding();
	
	public abstract void testSystem();
	
	public abstract void publishSystem();
	
	public void templateDesignSystem(){
		System.out.println("------------開始開發----------");
		needAnalysis();
		conceptualDesign();
		detailedDesign();
		coding();
		testSystem();
		publishSystem();
		System.out.println("------------開發完畢-----------");
	}
}

--3.2.支付系統的實現類:

public class PaymentSystem extends DesignCycle{

	@Override
	public void needAnalysis() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的需求分析");
	}

	@Override
	public void conceptualDesign() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的概要設計");
	}

	@Override
	public void detailedDesign() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的詳細設計");
	}

	@Override
	public void coding() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的編碼");
	}

	@Override
	public void testSystem() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的測試");
	}

	@Override
	public void publishSystem() {
		// TODO Auto-generated method stub
		System.out.println("支付系統的釋出");
	}
	
}

--3.3.物流系統的實現類:
//物流系統類
public class LogisticSystem extends DesignCycle{

	@Override
	public void needAnalysis() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的需求分析");
	}

	@Override
	public void conceptualDesign() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的概要設計");
	}

	@Override
	public void detailedDesign() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的詳細設計");
	}

	@Override
	public void coding() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的編碼");
	}

	@Override
	public void testSystem() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的測試");
	}

	@Override
	public void publishSystem() {
		// TODO Auto-generated method stub
		System.out.println("物流系統的釋出");
	}

}

--3.4測試類:
public class Test {

	public static void main(String[] args) {
		DesignCycle dc;
		dc=new PaymentSystem();
		dc.templateDesignSystem();
		
		dc=new LogisticSystem();
		dc.templateDesignSystem();
	}
}

結果:

------------開始開發----------
支付系統的需求分析
支付系統的概要設計
支付系統的詳細設計
支付系統的編碼
支付系統的測試
支付系統的釋出
------------開發完畢-----------
------------開始開發----------
物流系統的需求分析
物流系統的概要設計
物流系統的詳細設計
物流系統的編碼
物流系統的測試
物流系統的釋出
------------開發完畢-----------

---------------------------------------------------------------------------------------------------------------------------------------

總結1:

模板方法模式應用場景:當系統中存在不變的行為在子類中重複出現時,就將不變的行為和可變的行為分離,將不變的行為抽取出來放到一個單一的地方,讓子類們去實現這個單一的地方。避免了大量的重複程式碼,也同時為子類的設計做了一個統一的規範。

總結2:

具體的做法就是將重複不變的部分放在抽象父類中,然後讓子類們去繼承父類,然後重寫父類的抽象方法。

總結3:

模板方法模式的使用提高了程式碼的複用性。