Java设计模式之模板方法模式

    Java设计模式之模板方法模式

        时间又是隔了好几天哈,今天又学习了一种设计模式,是模板方法了,这种设计模式在没有了解到之前,但是我们在开发中绝大多数都会不知不觉的用到了,不过我们并不了解我们用到的方法会是一种设计模式,哈哈哈哈,只能说伟大的思想都是共通的;下面来看一下这种设计模式的详细情况吧

一 : 什么是模板方法模式 ?

    模板方法模式 : 定义一个操作中的算法骨架,将步骤延迟到子类中。
         以上就是一个较为官方的描述了,实际上呢,它是将一些公共的行为,移到了一个抽象的父类中,再将那些不同的部分在父类中定义抽象实现、而将具体实现过程由子类完成,有点绕口哈,
        简单的来讲,就是相同部分具体抽出,不同部分抽象抽出然后子类实现;我个人的话是这样理解的,大家有更好的描述也可以在评论写出共同理解

二: 模式实现原理

1. 模式的角色 :

     AbstractTemplate(抽象类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
     ConcreteTemplate(具体子类):它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。

2. 模式的结构
在这里插入图片描述

三: 代码实现

代码类图 :

上面的AbstractClass类中的execute方法就是一个算法骨架,它定义了复杂操作的许多步骤,其中需要注意:
(1)AbstractClass是抽象类,因为子类需要继承某些抽象方法
(2)execute是算法骨架,让外部调用,所以必须是public,但是又不想让子类进行重写,因此使用final关键字,如果重写则导致整个流程混乱。
(3)start和end方法是固定的步骤,定义为私有,不让子类修改。
(4)teaching方法是protected 的,保证子类可以重写,但是其它类无法看到,又是abstract 则子类必须重写。因为父类AbstractClass无法得知具体的物品该如何放入冰箱,只有靠子类去实现了

步骤一 : 抽象类

/**
 * @version 1.0.0
 * @Description 模板方法 : 课程抽象类
 */
public abstract class AbstractClass {
    public final void execute(){
        start();
        teaching();
        end();
    }

    private void start(){
        System.out.println("开始上课");
    }

    private void end(){
        System.out.println("下课了");
    }

    protected abstract void teaching();
}

步骤二 : 实现类1 : 数学课程

/**
 * @version 1.0.0
 * @Description 模板方法 : 课程实现类
 */
public class Math extends AbstractClass {
    @Override
    protected void teaching() {
        System.out.println("数学老师教了 1 + 1 为什么 = 2");
    }
}

实现类2 : 语文课

/**
 * @version 1.0.0
 * @Description 模板方法 : 课程实现类
 */
public class ChineseClass extends AbstractClass {
    @Override
    protected void teaching() {
        System.out.println("语文老师教了我是谁");
    }
}

步骤三 : 测试实现

public class ConcreteTest {
    public static void main(String[] args) {
        AbstractClass math = new Math();
        math.execute();

        System.out.println("-------------------");

        AbstractClass chineseClass = new ChineseClass();
        chineseClass.execute();
    }
}

测试 :

开始上课
数学老师教了 1 + 1 为什么 = 2
下课了
-------------------
开始上课
语文老师教了我是谁
下课了

四 总结 :

          以前的话,对于类图或者说是结构图这一块看的并不是很重,嗯,觉得这一块并不重要,主要想法是把它当做一个加深理解设计的辅助工具.没错,一个辅助的小工具,之前我就是这样看的.造成这样原因在很多的时候,我是先看到源码,之后去看类结构.这样就造成了一个先入为主.
          实际上我觉得类图是非常重要的,在进行代码设计阶段,做好类结构设计的话,是非常有利于开发的.提高开发效率,高的健壮性,利于扩展等等优点,不过好在是有发现这点,在以后的代码开发中就可以多多实战了

        今天对模板方法模式的学习就记录这么多,如果对大家有帮助的话,可以点一个赞哈,你的鼓励也是创作的动力.共同在计算机的世界加油吧 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值