设计模式之模板方法

设计模式之模板方法

什么是模板方法模式呐,在我看来就是先规定一些大概的流程,但是呢,有些具体的流程内部细节让子类去实现,就是将不变的封装起来,可变的留给子类具体实现,从而达到灵活处理。专业来讲就是在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式

类图

image-20210219225822697

看着比较简单哈,也确实很简单,但是这个模式的用途却很大,比如著名的AQS就是利用模板方法,实现AQS的一些抽象方法就可以自己制作一把锁。

代码

抽象类

public abstract class AbstractDisplay {
    /**
     * 打开操作
     */
    abstract void open();

    /**
     * 输出操作
     */
    abstract void print();

    /**
     * 关闭操作
     */
    abstract void close();

    /**
     * 模板方法,使用final是为了防止被子类重写
     */
    final void display() {
        open();
        print();
        close();
    }
}

具体类

public class ConcretClass extends AbstractDisplay{
    @Override
    void open() {
        System.out.println("子类实现打开文件");
    }

    @Override
    void print() {
        System.out.println("由子类实现的输出");
    }

    @Override
    void close() {
        System.out.println("由子类具体定义的关闭操作");
    }
}

调用

public class Client {
    public static void main(String[] args) {
        final ConcretClass concretClass = new ConcretClass();
        concretClass.display();
    }
}

总结

优点

规定了子类所要实现的方法,有一个通用的处理流程

缺点

就是必须要看父类的源代码才知道子类要如何进行实现

posted @ 2021-02-19 23:13  小鸡小鸡快点跑  阅读(55)  评论(0)    收藏  举报