示例一(老司机开车-模板设计模式)
我们现在定义一个新司机和老司机类,新司机和老司机都有开车功能,开车的步骤都一样,只是驾驶姿势有点不同,新司机:开门,点火,双手紧握方向盘,刹车,熄火,老司机:开门,点火,双jiao紧握方向盘,刹车,熄火
我们可以将固定流程写到父类中,不同的地方就定义成抽象方法,让不同的子类去重写,代码如下:
理解:子类继承抽象类,子类重写抽象类中的抽象方法.
public class Test02 {
public static void main(String[] args) {
OldDriver oldDriver = new OldDriver();
oldDriver.go();
NewDriver newDriver = new NewDriver();
newDriver.go();
}
}
abstract class Driver {
public void go() {
System.out.println("开门");
System.out.println("点火");
//开车姿势不确定?定义为抽象方法
zishi();
System.out.println("刹车");
System.out.println("熄火");
}
public abstract void zishi();
}
class NewDriver extends Driver{
@Override
public void zishi() {
System.out.println("双手紧握方向盘");
}
}
class OldDriver extends Driver{
@Override
public void zishi() {
System.out.println("双脚操控方向盘");
}
}
示例二(Servlet 源码微缩-模板设计模式)
public class Test03 {
public static void main(String[] args) {
MyService myService = new MyService();
myService.service("post");
myService.service("get");
}
}
class MyService extends HttpServlet {
@Override
public void get() {
System.out.println("get");
}
@Override
public void post() {
System.out.println("post");
}
}
interface Servlet {
void service(String method);
}
abstract class HttpServlet implements Servlet{
public HttpServlet() {
}
@Override
public void service(String method) {
if("get".equals(method)){
this.get();
}else if("post".equals(method)){
this.post();
}
}
public abstract void get();
public abstract void post();
}