1.概述
模板方法是将总体框架封装在父类并定义相关步骤,相关子类实现具体每一步骤细节的一种模式。
2.UML结构图
image.png3.代码实现
以coder一天的日程为例,每个人每个日程都不一样,但是整天日程的流程是一样的。
模板类
/**
* Created by zhouwen on 2019/7/9 21:46
* coder一天的日程为例
*/
public abstract class AbstractCoder {
// 吃早餐
public abstract void eat();
// 上班
public abstract void work();
// 下班
public abstract void comeOffWork();
// 学习
public abstract void study();
// 睡觉
public abstract void sleep();
public final void schedule(){
eat();
work();
comeOffWork();
study();
sleep();
}
}
搬运工A
/**
* Created by zhouwen on 2019/7/9 21:49
*/
public class CoderA extends AbstractCoder{
private Logger logger = Logger.getLogger("CoderA");
@Override
public void eat() {
logger.info("坐着吃饭");
}
@Override
public void work() {
logger.info("走路上班");
}
@Override
public void comeOffWork() {
logger.info("10点下班");
}
@Override
public void study() {
logger.info("看技术类书籍");
}
@Override
public void sleep() {
logger.info("凌晨1点睡觉");
}
}
搬运工B
/**
* Created by zhouwen on 2019/7/9 21:50
*/
public class CoderB extends AbstractCoder{
private Logger logger = Logger.getLogger("CoderB");
@Override
public void eat() {
logger.info("躺着吃饭");
}
@Override
public void work() {
logger.info("坐车上班");
}
@Override
public void comeOffWork() {
logger.info("11点下班");
}
@Override
public void study() {
logger.info("看管理类书籍");
}
@Override
public void sleep() {
logger.info("凌晨2点睡觉");
}
}
场景类
/**
* Created by zhouwen on 2019/7/9 21:52
*/
public class TemplateClient {
public void test() {
AbstractCoder codera = new CoderA();
codera.schedule();
AbstractCoder coderb = new CoderB();
codera.schedule();
}
}
4.优缺点
优点
4.1父类控制,子类实现。
4.2封装不变,子类可变,扩展性好。
缺点
会导致子类比较多
网友评论