核心:
基类封装不变部分,子类扩展可变部分;
提取公共代码,便于维护(行为父类控制,子类实现,非必须)
package TemplateDemo;
/**
* 这是一个抽象的模板类
* */
abstract class AbstractClass {
//定义一个模板方法来控制生产手机的流程
public void makeMobile(){//TemplateMethod
//首先生产手机体(模板方法自己完成)
System.out.println("生产了一个手机body");
this.makeDifferentFunction();
this.makeDifferentColor();
this.makeDifferentType();
System.out.println("一部手机制作完成");
//以上模板已经规定好了
}
//定义抽象的方法来完成不同的生产细节(不同功能的手机)
protected abstract void makeDifferentFunction();
//定义抽象的方法来完成不同的生产细节(不同颜色的手机)
protected abstract void makeDifferentColor();
//定义抽象的方法来完成不同的生产细节(不同类型的手机)
protected abstract void makeDifferentType();
}
/**
* 创建真是的实现类来实现具体的生产细节
* */
class ConcreteClass extends AbstractClass{
//实现父类中的抽象的方法
protected void makeDifferentColor() {
System.out.println("给该手机的颜色涂成蓝色");
}
protected void makeDifferentFunction() {
System.out.println("给该手机实现看MP4的功能");
}
protected void makeDifferentType() {
System.out.println("给该手机制作成翻盖的");
}
}
//写测试类
public class TestTemplate{
public static void main(String args[]){
AbstractClass ac = new ConcreteClass();//子类的对象付给父类
ac.makeMobile();//制作手机
//制作不同的手机只是修改子类就可以了
}
}