• 技术文章 >Java >java教程

    Java设计模式:模板方法模式实例解析

    WBOYWBOY2023-04-23 16:07:07转载22

    模板方法模式

    模板方法模式法(Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

    模板方法模式包含以下主要角色:

    【案例】

    炒菜的步骤是固定的,分为倒油、热油、倒蔬菜、倒调料品、翻炒等步骤。但是可以倒入不同的蔬菜和不同的酱料。现通过模板方法模式来用代码模拟

    Java设计模式之模板方法模式实例分析

    public class TemplateTest {
        public static void main(String[] args) {
            //炒包菜
            BaoCai baoCai = new BaoCai();
            baoCai.cookProcess();
            System.out.println("-------------");
            //炒白菜
            BaiCai baiCai = new BaiCai();
            baiCai.cookProcess();
        }
    }
    abstract class AbstractClass{ //抽象类
        //模板方法定义
        public final void cookProcess() {
            this.pourOil();//倒油
            this.heatOil();//热油
            this.pourVegetable();//倒蔬菜
            this.pourSauce();//倒调味料
            this.fry();//翻炒
        }
        public abstract void pourVegetable();//倒蔬菜是不一样的(一个下包菜,一个是下白菜)
        public abstract void pourSauce();//倒调味料是不一样
        public void pourOil() {System.out.println("倒油");}
        public void heatOil() {System.out.println("热油");}
        public void fry(){System.out.println("炒啊炒");}
    }
    class BaoCai extends AbstractClass{
        public void pourVegetable() {System.out.println("加入包菜");}
        public void pourSauce() {System.out.println("加入辣椒酱");}
    }
    class BaiCai extends AbstractClass{
        public void pourVegetable() {System.out.println("加入白菜");}
        public void pourSauce() {System.out.println("加入盐和味精");}
    }

    【运行结果】

    倒油
    热油
    加入包菜
    加入辣椒酱
    炒啊炒
    -------------
    倒油
    热油
    加入白菜
    加入盐和味精
    炒啊炒

    Process finished with exit code 0

    模板方法模式的优缺点

    优点:

    1、提高代码复用性,将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中。

    2、实现了反向控制,通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 ,并符合“开闭原则”。

    缺点:

    1、对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。

    2、父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

    使用场景

    1、算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

    2、需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。

    以上就是Java设计模式:模板方法模式实例解析的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Java
    上一篇:如何在Java的.properties文件中写入反斜线\? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java如何实现emqx设备上下线监听• Java redis存Map对象类型数据怎么实现• java如何求数值型数组中元素的最大值、最小值、平均数、总和等操作• java泛型接口的使用注意事项是什么• java8中的四种方法怎么引用
    1/1

    PHP中文网