zoukankan      html  css  js  c++  java
  • 设计模式:模板方法设计模式

    定义

    模板方法设计模式又叫做模板模式,指定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得字类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤,属于行为型设计模式。

    使用场景:

    • 一次性实现一个算法的不变部分,并将可变的行为留给子类实现。
    • 各个类中公共的行为被提取出来,集中到一个公共的父类中,避免重复。

    场景一

    需求:需要喝一杯龙井

    步骤如下:

    public class MakeTea {
    
        public void start(){
            step1();
            step2();
            step3();
            step4();
            step5();
        }
    
        private void step1(){
            System.out.println("烧水");
        }
    
        private void step2(){
            System.out.println("茶叶放在杯子中");
        }
    
        private void step3(){
            System.out.println("将开水倒入杯子");
        }
    
        private void step4(){
            System.out.println("过一段时间");
        }
    
        private void step5(){
            System.out.println("喝茶");
        }
    
    }
    

    测试:

        public static void main(String[] args) {
            MakeTea makeTea = new MakeTea();
            makeTea.start();
        }
    

    场景二

    需求:现在又需要喝一杯咖啡

    步骤如下:

    public class MakeCoffee {
    
        public void start(){
            step1();
            step2();
            step3();
            step4();
            step5();
        }
    
        private void step1(){
            System.out.println("烧水");
        }
    
        private void step2(){
            System.out.println("咖啡粉放在杯子中");
        }
    
        private void step3(){
            System.out.println("将开水倒入杯子");
        }
    
        private void step4(){
            System.out.println("过一段时间");
        }
    
        private void step5(){
            System.out.println("喝咖啡");
        }
    
    }
    

    我们发现喝咖啡和喝茶流程步骤基本一致,但小细节不一样,我们可以将其抽取到一个类中(其实我们平时开发时有时候用到了模板方法模式,但是我们不知道这是模板方法模式)

    模板方法模式写法

    首先我们对上述需求创建模板,把步骤流程方法和相同的步骤给封装到模板中,以后我们就跟着模板来就行了。(创建方法的模板,子类跟着模板来就可以了)

    public abstract class Make {
    
        public final void start(){
            step1();
            step2();
            step3();
            step4();
            step5();
        }
    
        private void step1(){
            System.out.println("烧水");
        }
    
        abstract void step2();
    
        private void step3(){
            System.out.println("将开水倒入杯子");
        }
    
        private void step4(){
            System.out.println("过一段时间");
        }
    
        abstract void step5();
    }
    

    创建喝咖啡的实现类

    public class MakeCoffee extends Make{
        @Override
        void step2() {
            System.out.println("咖啡粉放在杯子中");
        }
    
        @Override
        void step5() {
            System.out.println("喝咖啡");
        }
    }
    

    类图:

    image-20201226220125055

    测试:

        public static void main(String[] args) {
            Make make = new MakeCoffee();
            make.start();
        }
    

    image-20201226215712826

    以上就是模板方法设计模式的具体实现,理解也没有难度。

  • 相关阅读:
    Report studio交叉表求指定维度和的问题
    Cognos清除本地高速缓存的利与弊
    学习技巧-如何在IBM官网寻找学习资料
    Cognos利用DMR与文本对象设计中国式报表
    Cognos Report Studio 链接查询需要注意的地方2
    linux下自己下载的程序装哪?
    maven编译war包,pom中必须有的几个dependency
    跨站请求伪造解决办法之——过滤referer
    tomcat禁用webdav
    Tomcat配置https
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14194636.html
Copyright © 2011-2022 走看看