设计模式之模板方法模式

模板方法模式定义

Template Method Pattern:  Define the skeleton of an algorithm in an  operation, deferring some steps to subclasses. Template Method lets  subclasses redefine certain steps of an algorithm without changing the  algorithm's structure.

上面的意思就是说,在一个操作中定义一个算法的框架,推迟一些步骤到子类中(我的理解就是,将父类中的某些抽象方法在子类中进行具体实现),模板方法让子类在不改变算法结果的情况下,重新定义算法中的某些步骤.

模式结构图

代码示例

1.定义抽象父类,也就是算法的骨架

public abstract class AbstractLife {

    private void begin(){
        System.out.println("早上打卡");
    }
    //定义抽象方法,子类中具体实现
    protected abstract void work();
    private void end(){
        System.out.println("下午打卡");
    }
    public abstract void freeTime();

    public void dayLife(){
        begin();
        work();
        end();
        freeTime();
    }
}

2.定义子类,继承父类方法

public class CommonOfficeWorker extends AbstractLife{
    @Override
    public void work() {
        System.out.println("普通上班族,正常上班");
    }

    @Override
    public void freeTime() {
        System.out.println("自由活动");
    }
}
public class SpecialProgrammer extends AbstractLife{
    @Override
    public void work() {
        System.out.println("程序员,正常上班");
    }

    @Override
    public void freeTime() {
        System.out.println("苦逼加班");
    }
}

3.测试类(因为java面向对象的特性,运行时,子类会重写父类的抽象方法)

public class TestMain {

    public static void main(String[] args) {

        AbstractLife common = new CommonOfficeWorker();
        AbstractLife special = new SpecialProgrammer();

        common.dayLife();
        System.out.println("-----------");
        special.dayLife();
    }
}

4.运行结果

优缺点

优点:把不变的放到父类,把变化的细节在子类中具体重新定义,也可以有新的定义,有助于扩展,同时也简化了代码结构.

缺点:每个实现都需要定义一个子类,如果子类特别多,那么这将会非常庞大,设计会越来越抽象.

原文地址:https://www.cnblogs.com/fxust/p/8179041.html