Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


设计模式之模板方法模式

设计模式 Java 大约 1713 字

作用

算法只在父类中,需要修改时只需修改父类的模板方法即可。

不足之处:每一个不同的实现都需要子类实现,导致类增加。

案例

抽象类

模板方法:make(),final修饰,定义了算法骨架。

钩子方法:customerWantCondiments,子类可视情况覆盖。

public abstract class SoyaMilk {

    final void make() {
        select();
        if (customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    void select() {
        System.out.println("选黄豆");
    }

    //添加不同配料
    abstract void addCondiments();

    void soak() {
        System.out.println("开始浸泡");
    }

    void beat() {
        System.out.println("打碎");
    }

    //钩子方法
    boolean customerWantCondiments() {
        return true;
    }

}

实现类

public class RedBeanSoyaMilk extends SoyaMilk {
    @Override
    void addCondiments() {
        System.out.println("加入红豆");
    }
}

public class PeanutSoyaMilk extends SoyaMilk {

    @Override
    void addCondiments() {
        System.out.println("加入花生");
    }
}

调用

public class Client {

    public static void main(String[] args) {
        SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
        peanutSoyaMilk.make();
        System.out.println("-------------------------");
        SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk();
        redBeanSoyaMilk.make();
    }
}

源码

org.springframework.context.ConfigurableApplicationContext

org.springframework.context.support.AbstractApplicationContext

org.springframework.context.support.AbstractRefreshableApplicationContext

org.springframework.context.support.AbstractRefreshableConfigApplicationContext

org.springframework.context.support.AbstractXmlApplicationContext

org.springframework.context.support.ClassPathXmlApplicationContext

org.springframework.context.support.AbstractRefreshableApplicationContext

阅读 2540 · 发布于 2019-12-23

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批