劳动节期间学习设计模式-模板方法模式

简介: 劳动节期间学习设计模式-模板方法模式

😎模板方法模式

大家好吖,这个五一大家有没有出去玩吖,如果没有出去玩的话,那么就跟着我来学习模板方法设计模式吧😎

定义

定义了一个 算法的骨架 , 并允许 子类 为 一个或多个 步骤 提供实现;模板方法模式可以使子类在不改变 算法结构 的前提下 , 重新定义算法的某些步骤 ;

举个荔枝

🎨简单举个荔枝

五一了,懒羊羊还在睡懒觉,这时喜羊羊过来叫醒了他

喜羊羊:懒羊羊,快醒醒,起床啦,太阳都晒pp了

懒羊羊:醒了,是吃饭了吗

喜羊羊:你一天天就知道吃🙄 ,不过也不是不可以,我这有个任务,你来帮我做好了,我请你吃烧烤😎

懒羊羊:哇偶,烧烤,为了吃的我拼了😋,不对,其实我是为了学知识,才不是为了烧烤呢😎

喜羊羊:听你在这gui扯😂

喜羊羊:我现在给你安排任务,你测试下java中,ArrayList和LinkedList的插入效率哪个高一些

懒羊羊:我还以为是什么难题呢,需要我亲子动手,这个so easy啦

【One Hour Later】

懒羊羊:喜羊羊,我写好了,你看,这是代码

Client

public class Client {
    public static void main(String[] args) {
        System.out.println("测试开始");
        long start = System.currentTimeMillis();
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i < 10000010; i++) {
            arrayList.add(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("测试结束");
        System.out.println(end-start);
        System.out.println("测试开始");
        start = System.currentTimeMillis();
        LinkedList<Integer> linkedList = new LinkedList<>();
        for (int i = 0; i < 10000010; i++) {
            linkedList.add(i);
        }
        end = System.currentTimeMillis();
        System.out.println("测试结束");
        System.out.println(end-start);
    }
}

这是测试结果

懒羊羊:任务完成啦,我要吃烧烤😎

喜羊羊:你这写的啥代码啊,怎么还有重复的模块呢,你看看:

喜羊羊:快改,不然你的烧烤就飞了

懒羊羊:不要不要,我马上改

【懒羊羊去查询了下资料,发现这个可以用模板方法模式优化

懒羊羊:学到了,我用模板方法优化下,我把重复的部分定义成一个模板不就好了,真聪明😎

懒羊羊:我先定义一个模板抽象类,里面定义一个模板方法,将公用的放到模板方法里面去,具体需要测试的代码放到testCode方法里面去

【Tips】:定义了一个 算法的骨架

Template

public abstract class Template {
    /**
     * 模板方法
     */
    public void template(){
        System.out.println("测试开始");
        long start = System.currentTimeMillis();
        testCode();
        long end = System.currentTimeMillis();
        System.out.println("测试结束");
        System.out.println(end-start);
    }
    /**
     * 需要测试的代码
     */
    protected abstract void testCode();
}

懒羊羊:然后我们定义一个ArrayTest类和ListTest继承Template类

ArrayTest

public class ArrayTest extends Template{
    /**
     * 需要测试的代码
     */
    @Override
    protected void testCode() {
        ArrayList<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i < 10000010; i++) {
            arrayList.add(i);
        }
    }
}

ListTest

public class ListTest extends Template{
    /**
     * 需要测试的代码
     */
    @Override
    protected void testCode() {
        LinkedList<Integer> linkedList = new LinkedList<>();
        for (int i = 0; i < 10000010; i++) {
            linkedList.add(i);
        }
    }
}

懒羊羊:最后我们在client中简单写一下即可😊

Client

public class Client {
    public static void main(String[] args) {
        ArrayTest arrayTest = new ArrayTest();
        arrayTest.template();
        System.out.println("=================");
        ListTest listTest = new ListTest();
        listTest.template();
    }
}

懒羊羊:收工,运行看结果

喜羊羊:嗯,还是阔以嘛,我看下,基本合格吧,阔以去吃烧烤

🍔模式类图

懒羊羊:这个类图就很简单啦

🧂优缺点

优点:

  • 模板方法模式将不变的行为抽提到了父类中,去除了重复代码
  • 子类可以自由实现抽象算法中的具体细节,阔以扩展

缺点:

  • 我们发现啊,每个不同的实现都需要定义一个子类,后期可能会导致超级多的类,维护变得复杂

🍗适用环境

  • 当有一组类似的问题需要解决时,可以使用模板设计模式来避免重复编写代码;
  • 当需要通过固定的步骤来完成一项任务时,可以使用模板设计模式来建立一个过程框架,其中每个步骤都可以由子类实现;
  • 当需要定义一组操作的执行顺序时,可以使用模板设计模式来定义算法骨架,并允许子类实现特定的步骤;
  • 当需要控制某个算法的流程时,可以使用模板设计模式来使用固定的流程模板,并通过子类来提供不同的实现。


相关文章
|
4月前
|
设计模式 算法
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
|
4月前
|
设计模式 存储 Java
认真学习设计模式之观察者模式(Observer Pattern)
认真学习设计模式之观察者模式(Observer Pattern)
31 0
|
3月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
62 0
|
4天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
4天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
15天前
|
设计模式 算法 Java
小谈设计模式(11)—模板方法模式
小谈设计模式(11)—模板方法模式
|
18天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
15 0
|
4月前
|
设计模式 存储 Java
认真学习设计模式之命令模式(Command Pattern)
认真学习设计模式之命令模式(Command Pattern)
80 0
|
1月前
|
设计模式 存储 算法
【设计模式】模板方法模式
【设计模式】模板方法模式
|
2月前
|
设计模式 算法 Java
Java设计模式——模板方法模式
Java设计模式——模板方法模式
41 2