美文网首页
模板方法模式

模板方法模式

作者: 码上述Andy | 来源:发表于2019-07-09 22:09 被阅读0次

1.概述

模板方法是将总体框架封装在父类并定义相关步骤,相关子类实现具体每一步骤细节的一种模式。

2.UML结构图

image.png

3.代码实现

以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封装不变,子类可变,扩展性好。
缺点
会导致子类比较多

That's All

相关文章

网友评论

      本文标题:模板方法模式

      本文链接:https://www.haomeiwen.com/subject/wvxqkctx.html