欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【设计模式——学习笔记】模板方法模式

【设计模式——学习笔记】模板方法模式

2024/10/24 5:23:02 来源:https://blog.csdn.net/WaaTong/article/details/140626536  浏览:    关键词:【设计模式——学习笔记】模板方法模式

介绍

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。这种模式的主要目的是通过将不变的行为放在父类中,而将可变的行为留给子类来实现代码复用和扩展。

案例实现

案例一

问题介绍

展示了一个制作饮料的过程,说明如下。

  • 饮料的制作流程相同:煮水->酿造->倒入容器->添加调味品
  • 但不同饮料的酿造喝调味品有所区别

实现

【饮料抽象类】

// 抽象类,定义算法的骨架
abstract class Beverage {// 模板方法,定义制作饮料的步骤public final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}// 具体方法,步骤1void boilWater() {System.out.println("Boiling water");}// 抽象方法,步骤2,由子类实现abstract void brew();// 具体方法,步骤3void pourInCup() {System.out.println("Pouring into cup");}// 抽象方法,步骤4,由子类实现abstract void addCondiments();
}

【茶】

class Tea extends Beverage {@Overridevoid brew() {System.out.println("Steeping the tea");}@Overridevoid addCondiments() {System.out.println("Adding lemon");}
}

【咖啡】

class Coffee extends Beverage {@Overridevoid brew() {System.out.println("Dripping coffee through filter");}@Overridevoid addCondiments() {System.out.println("Adding sugar and milk");}
}

【测试】

public class TemplateMethodPatternDemo {public static void main(String[] args) {Beverage tea = new Tea();tea.prepareRecipe();Beverage coffee = new Coffee();coffee.prepareRecipe();}
}

案例二

问题介绍

spring中的bean的依赖注入

实现

public class TestMethodTemplatePattern {public static void main(String[] args) {MyBeanFactory beanFactory = new MyBeanFactory();beanFactory.addBeanPostProcessor(bean -> System.out.println("解析 @Autowired"));beanFactory.addBeanPostProcessor(bean -> System.out.println("解析 @Resource"));beanFactory.getBean();}static class MyBeanFactory {public Object getBean() {Object bean = new Object();System.out.println("构造:" + bean);System.out.println("依赖注入:" + bean);for (BeanPostProcessor processor : processors) {processor.inject(bean);}System.out.println("初始化:" + bean);return bean;}private List<BeanPostProcessor> processors = new ArrayList<>();public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {processors.add(beanPostProcessor);}}interface BeanPostProcessor {void inject(Object bean);}
}

MyBeanFactory

  • getBean 方法:模拟了创建一个Bean的过程,包括构造、依赖注入和初始化三个步骤。这个过程使用了一个模板方法模式,将依赖注入的具体实现延迟到子类或外部实现类中。
  • addBeanPostProcessor 方法:允许外部添加自定义的 BeanPostProcessor 实现,以实现不同的依赖注入逻辑。

BeanPostProcessor

  • 定义了一个 inject 方法,供外部实现依赖注入逻辑,将逻辑内容交给调用方。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com