• 模板方法模式


      大家好,我是小赵,目前在藏剑山庄任职铸剑师领班,没错,我是领班。

      今天给大家演示一手模板方法模式,说实话,这个设计模式我们几乎每个人都在用,只是有些人不知道这种做法有个名称,叫做模板方法模式。

      用我的小弟们来做例子吧。

    小明干活:

    public class XiaoMing {
        public void doIt(){
            System.out.println("小明报道!");
            System.out.println("领料中...");
            System.out.println("铸剑中...");
            System.out.println("小明铸剑完成!");
        }
    }

    小红干活:

    public class XiaoHong {
        public void doIt(){
            System.out.println("小红报道!");
            System.out.println("领料中...");
            System.out.println("铸剑中...");
            System.out.println("小红铸剑完成!");
        }
    }

      例子中虽然是简短的一行行打印,在我们实际工作项目中,可能就是一个个方法,或者是一堆堆代码块。

      这里咱们正常优化的时候,肯定会把相同的代码拧出来,做成一个函数大家调,就不用你写一份、我写一份了。其实这就是模板方法模式的核心思想了,就是提取公共代码,把不变的行为搬移到父类,去除子类中重复代码。

      我的小弟们干活的流程,其实就相当于一个模板,每个人都要做这些事,所以相同的事情就抽取出来写在模板里,而他们每个人就继承这个模板。

    模板类:

    abstract class MakeTemplate {
        protected final void material(){
            System.out.println("领料中...");
        }
    
        protected final void forge(){
            System.out.println("铸剑中...");
        }
    
        abstract void doIt();
    }

      之所以有final加持,是因为我不想让子类重写方法,这个final并不是模板方法模式的规则,实战中我们都会根据自身的业务情况来决定,必须把模板方法也写成abstract,由子类去实现也有的。

    小明干活:

    public class XiaoMing extends MakeTemplate {
        public void doIt(){
            System.out.println("小明报道!");
            this.material();
            this.forge();
            System.out.println("小明铸剑完成!");
        }
    }

    小红干活:

    public class XiaoHong extends MakeTemplate {
        public void doIt(){
            System.out.println("小红报道!");
            this.material();
            this.forge();
            System.out.println("小红铸剑完成!");
        }
    }

      在重构代码的时候,可以多考虑模板方法模式,凡是多个子类有共有方法、公有算法、都可以提取出来做成模板,让子类去调用。如果在继承上面没有资源,也可以做成一个公共工具类让大家去调用,一般来说,这是经常使用的玩法。

  • 相关阅读:
    TPYBoard—MicroPython开发板免费试用!你最想抱走哪款?
    MicroPython最全资料集锦丨TPYBoard全系列教程之文档+例程源码
    MicroPython-GPRS教程之TPYBoardv702GPRS功能测试
    MicroPython-GPS教程之TPYBoardv702控制5110显示当前经纬度
    MicroPython之TPYBoard v102开发板控制OLED显示中文
    TPYBoard开发板ADC数模转换一: 初识ADC使用
    Set集合
    Collection接口和List集合
    在方法中抛出异常,使用throw关键字抛出异常
    捕捉异常和异常的使用原则
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/10753628.html
Copyright © 2020-2023  润新知