当前位置: 代码网 > it编程>编程语言>Java > 【设计模式——学习笔记】模板方法模式

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

2024年08月02日 Java 我要评论
展示了一个制作饮料的过程,说明如下。饮料的制作流程相同:煮水->酿造->倒入容器->添加调味品但不同饮料的酿造喝调味品有所区别spring中的bean的依赖注入。

介绍

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

案例实现

案例一

问题介绍

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

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

实现

【饮料抽象类】

// 抽象类,定义算法的骨架
abstract class beverage {

    // 模板方法,定义制作饮料的步骤
    public final void preparerecipe() {
        boilwater();
        brew();
        pourincup();
        addcondiments();
    }

    // 具体方法,步骤1
    void boilwater() {
        system.out.println("boiling water");
    }

    // 抽象方法,步骤2,由子类实现
    abstract void brew();

    // 具体方法,步骤3
    void pourincup() {
        system.out.println("pouring into cup");
    }

    // 抽象方法,步骤4,由子类实现
    abstract void addcondiments();
}

【茶】

class tea extends beverage {

    @override
    void brew() {
        system.out.println("steeping the tea");
    }

    @override
    void addcondiments() {
        system.out.println("adding lemon");
    }
}

【咖啡】

class coffee extends beverage {

    @override
    void brew() {
        system.out.println("dripping coffee through filter");
    }

    @override
    void 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 方法,供外部实现依赖注入逻辑,将逻辑内容交给调用方。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com