1. 程式人生 > >簡單的介面和抽象類實現模板設計模式

簡單的介面和抽象類實現模板設計模式

一、先使用介面實現模板設計模式

1、先寫模板模式中大家公共的方法,將該方法放到一個接口裡:

public interface MyPublic {
	
	public void step02();
}

2、寫模板類(step01和step03是公共的不變的方法,step02是公共各自需要實現改變的方法,也就需要傳入一個實現類物件)

public class MyTemplate {

	public void step01() {
		System.out.println("step01().......");
	}
	
	public void step02(MyPublic myPublic) {
		myPublic.step02();
	}
	
	public void step03() {
		System.out.println("step03().......");
	}
	
	public void step(MyPublic myPublic) {
		this.step01();
		this.step02(myPublic);
		this.step03();
	}
}

3、實現公共的各自實現的方法的介面(哈哈,繞口不,就是實現第一步裡MyPublic介面)

public class ImplementsPublic implements MyPublic{

	@Override
	public void step02() {

		System.out.println("step02()~~~~~~~");
	}
}

4、編寫各自的類(將模板類作為屬性寫入)

public class MyStep {

	MyTemplate myTemplate;
		
	public MyTemplate getMyTemplate() {
		return myTemplate;
	}

	public void setMyTemplate(MyTemplate myTemplate) {
		this.myTemplate = myTemplate;
	}

	public static void main(String[] args) {
		
		MyStep myStep = new MyStep();   //new本類的物件
		myStep.setMyTemplate(new MyTemplate());   //給本類的myTemplate屬性例項化
		myStep.getMyTemplate().step(new ImplementsPublic());    
        //呼叫本屬性模板裡step方法並傳入介面以實現的類,按照模板中step方法中的步驟執行	
    }
}	

5、結果

step01().......
step02()~~~~~~~
step03().......

二、使用抽象類實現模板設計模式

1、將公共的一致的方法和需要子類更改的抽象的方法寫道一個抽象類裡

public abstract class MyTemplate {

	public abstract void step01();
	
	public void step02(){
		
		System.out.println("MyTemplate.step02()");
	}
	
	public void step03(){
		
		System.out.println("MyTemplate.step03()");
	}
	
	public void step(){
	
		step01();
		step02();
		step03();		
	}
}

2、寫第一個實現類附加列印的結果

public class Impl01 extends MyTemplate{

	@Override
	public void step01() {
		
		System.out.println("Impl01.step01()");
	}
	
	public static void main(String[] args) {
		Impl01 impl01 = new Impl01();
		impl01.step();
	}
}

Impl01.step01()
MyTemplate.step02()
MyTemplate.step03()

3、寫第二個實現類附加列印的結果

public class Impl02 extends MyTemplate{

	@Override
	public void step01() {

		System.out.println("Impl02.step01()");
	}
	
	public static void main(String[] args) {
		
		Impl02 impl02 = new Impl02();
		impl02.step();
	}
}

Impl02.step01()
MyTemplate.step02()
MyTemplate.step03()

這樣就實現了由抽象的父類作為模板,裡面包含了變與不變的方法,需要改變的方法就寫成抽象類,交給繼承的子類來完成實現,不變的方法就直接書寫方法體,交給子類繼承,而且方法的具體執行流程也寫在了模板父類裡,這樣,各個子類一是要實現需要按照自己的步驟執行抽象方法,並按照父類的執行流程執行即可,這樣便體現了模板方法設計模式。