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

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

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

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

    小明干活:

    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("小红铸剑完成!");
        }
    }

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

  • 相关阅读:
    Linux kernel AACRAID Driver Compat IOCTL 本地安全绕过漏洞
    WordPress Contact Form 7插件任意文件上传漏洞
    文件上传
    Po类设计
    MySQL 表设计
    Mybatis——更新DB表的字段时,应该注意的点
    分页——为Mybatis配置PageHelper
    SpringAOP配置与使用(示例)
    日志问题
    为一台全新的电脑构建JavaEE开发环境
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/10753628.html
Copyright © 2011-2022 走看看