您的位置:首页 > 其它

模板方法模式

2015-11-12 11:41 344 查看
参考:《设计模式之禅》

实现方法:继承。

本质:父类建立框架,子类重写了父类的部分方法后,再调用从父类继承的方法,从而产生不同的结果。

以学生为例:

public abstract class Student {

	public abstract void love();//恋爱~
	public abstract void study();//学习
	public abstract void graduate();//毕业了!
}


public class Student1 extends Student{

	public void love(){
		System.out.println("交了个美女!");
	}
	public void study(){
		System.out.println("学习不错啊!");
	}
	public void graduate(){
		this.love();
		this.study();
	}
}


public class Student2 {
	public void love(){
		System.out.println("因为玩游戏没有女朋友!");
	}
	public void study(){
		System.out.println("因为玩游戏是学渣");
	}
	public void graduate(){
		this.love();
		this.study();
	}
}


两个学生虽然大学里做的事不一样,但是终究要毕业。然而共同实现的毕业方法显得多余,应该在抽象中包括所有子类的共性。

修改如下:

public abstract class Student {

	public abstract void love();//恋爱~
	public abstract void study();//学习
	public void graduate(){
this.love();
	this.study();



}//毕业了!


}


public class Student1 extends Student{

	public void love(){
		System.out.println("交了个美女!");
	}
	public void study(){
		System.out.println("学习不错啊!");
	}
}


public class Student2 {
	public void love(){
		System.out.println("因为玩游戏没有女朋友!");
	}
	public void study(){
		System.out.println("因为玩游戏是学渣");
	}
}


抽象模板的方法两类:

1.子类实现的基本方法,在模板方法中被调用。

1.一个或多个,调用基本方法的一般为具体方法的模板方法,也就是一个框架,加上final不被修改。

优点:

1.封装不变部分,扩展可变部分。这样如果增加一个稍有不同的子类(学生)非常方便。

2.如果是公共方法出了问题,便于定位bug。

3.子类通过扩展增加相应的功能,符合开闭原则。

使用场景:

1.子类共有公共方法,并逻辑相同。

2.核心算法位模板方法,相关细节功能由子类实现。

+
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: