デザインパターン_テンプレートパターン

テンプレート パターンは、抽象クラスからパブリック メソッドを抽出し、サブクラスで実装する比較的単純な設計パターンです。まさにテンプレートのようなものです。継承されたそれぞれのメソッドは、その中で発表されたメソッドを実装する必要があります。誰もが言うでしょう、これはプロジェクトに取り組んでいるときに書かれたbaseDaoではないでしょうか? それは正しい。これがアプリケーションです。

注意すべき方法があります。それはフックの使い方です。これは、パブリック クラスに抽象メソッドが存在することを意味しますが、このメソッドはすべてのオブジェクトで呼び出される必要はありません。たとえば、自動車モデルではホーン機能を実装する必要があるが、使用する必要はない場合など、フック モードを使用できます。


基本的なクラス図。



コード。

public abstract class CarT {
	protected boolean hook = true;
	
	protected abstract void startCar() ;
	protected abstract void stopCar() ;
	
	final public void carRun(){
		this.startCar();
		System.out.println("汽车运行中");
		if(this.hook){
			this.isWhistled();
		}
		this.stopCar();
	}
	
	final public void isWhistled(){
		System.out.println("汽车鸣笛");
	}
	
	public void setHook(boolean _flag){
		this.hook = _flag;
	}
}


public class CarA extends CarT {
	public void startCar(){
		System.out.println("汽车A启动声音是嘟嘟~");
	}

	@Override
	public void stopCar() {
		System.out.println("汽车A停止声音是滴滴~");
	}
}	
public class CarB extends CarT {

	@Override
	protected void startCar() {
		System.out.println("汽车B启动的声音是咚咚~");
	}

	@Override
	protected void stopCar() {
		System.out.println("汽车B启动的声音是叮叮~");
	}

}

public class client {
	public static void main(String args[]){
		CarT carA = new CarA();
		carA.setHook(false);
		carA.carRun();
		System.out.println("======");
		CarT carB = new CarB();
		carB.carRun();
	}
	
}

これは比較的単純なデザインパターンです。誰もが見たことがあるはずだ。

おすすめ

転載: blog.csdn.net/my_God_sky/article/details/52621109