设计模式之模板方法模式
设计模式 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扫描下方二维码关注公众号和小程序↓↓↓
昵称:
随便看看
换一批
-
YAML 基础语法阅读 803
-
Docker Java 镜像阅读 861
-
Docker 部署 PostgreSQL阅读 1444
-
Spring Boot 将 InputStream 输入流转换为 String阅读 1750
-
数据结构:队列-数组实现阅读 1531
-
Java 并发编程之 AQS CyclicBarrier 源码解析阅读 1474
-
Java 中 null == 和 == null 判断是否为 null 的区别阅读 3852
-
Git 命令之代码合并 rebase阅读 2557
-
软考-系统架构设计师:局部性原理阅读 2289
-
Prometheus+Grafana+jmx_exporter 监控 Java 虚拟机阅读 1818