首页 > 其他分享 >设计模式--行为型模式

设计模式--行为型模式

时间:2022-12-16 22:26:37浏览次数:34  
标签:-- 子类 模式 实现 钩子 抽象类 设计模式 方法 模板

行为型模式

模板模式

在含有继承结构的代码中,模板方法模式是非常常用的。用一个统一的父类实现定义所有的方法和接口。不同的子类来完成自己具体的实现。

父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现

模板方法只负责定义第一步应该要做什么,第二步应该做什么,第三步应该做什么,至于怎么做,由子类来实现。

好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好

缺点: 每一个不同的实现都需要一个子类来实现,导致类个数增加,使系统更加庞大

模板模式的关键点:

    1、使用抽象类定义模板类,并在其中定义所有的基本方法、模板方法,钩子方法,不限数量,以实现功能逻辑为主。其中基本方法使用final修饰,其中要调用基本方法和钩子方法,基本方法和钩子方法可以使用protected修饰,表明可被子类修改。

    2、定义实现抽象类的子类,重写其中的模板方法,甚至钩子方法,完善具体的逻辑。

  使用场景:

    1、在多个子类中拥有相同的方法,而且逻辑相同时,可以将这些方法抽出来放到一个模板抽象类中。

    2、程序主框架相同,细节不同的情况下,也可以使用模板方法。

架构方法介绍

模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)。

四种方法的基本定义(前提:在抽象类中定义):

(1)抽象方法:由抽象类声明,由具体子类实现,并以abstract关键字进行标识。

(2)具体方法:由抽象类声明并且实现,子类并不实现或者做覆盖操作。其实质就是普遍适用的方法,不需要子类来实现。

(3)钩子方法:由抽象类声明并且实现,子类也可以选择加以扩展。通常抽象类会给出一个空的钩子方法,也就是没有实现的扩展。它和具体方法在代码上没有区别,不过是一种意识的区别;而它和抽象方法有时候也是没有区别的,就是在子类都需要将其实现的时候。而不同的是抽象方法必须实现,而钩子方法可以不实现。也就是说钩子方法为你在实现某一个抽象类的时候提供了可选项,相当于预先提供了一个默认配置。

(4)模板方法:定义了一个方法,其中定义了整个逻辑的基本骨架。

public abstract class AbstractTemplate {
    // 这就是模板方法
    public void templateMethod() {
        init();
        apply(); // 这个是重点
        end(); // 可以作为钩子方法
    }
	//这是具体方法
    protected void init() {
        System.out.println("init 抽象层已经实现,子类也可以选择覆写");
    }
 
    // 这是抽象方法,留给子类实现
    protected abstract void apply();
	//这是钩子方法,可定义一个默认操作,或者为空
    protected void end() {
    }
}

 

标签:--,子类,模式,实现,钩子,抽象类,设计模式,方法,模板
From: https://www.cnblogs.com/aalan/p/16988388.html

相关文章

  • 200008 计算柱的土方量和钢筋量已知集中标注
    点击查看代码<?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='......
  • 基础操作命令
    搜索命令find其命令格式为find路径[选项]文件名选项常用参数-name-inamesizetypeusergroup-name表示按照文件名进行搜索,区分大小写-iname表示按照......
  • 文件与目录管理
    文件与目录管理目录文件与目录管理一、Linux和Windows系统目录区别二、目录与路径三、常用目录处理命令ls列出目录及文件名cd切换目录pwd显示目前的目录mkdir创建......
  • vim编辑器
    vim编辑器命令行输入vim/vifilename进入vim编辑模式iao插入模式---esc-->命令模式---:-->末行模式wq!一、命令模式1、光标移动n向右n向下......
  • 用户与用户组管理
    用户与用户组管理who查看当前用户,上线时间、使用的终端机、从哪边连上来的、呆滞时间、CPU使用量、动作等等whoami查看当前用户相关的系统文件用户/etc/passwd......
  • Codeforces Round 838 (Div. 2)
    B.MakeArrayGood题意:给定n个数,每次可以对其中一个数进行操作,其中,在操作数量不超过n的前提下,构造一种操作使得任意两个数中,大的数可以被小的数整除。分析:结论:所......
  • SQL】sql语句LEFT JOIN(拼接表)详解
    1、语法SELECTcolumn_name(s)FROMtable1LEFTJOINtable2ONtable1.column_name=table2.column_name;2、说明按照一定规则,将表table1和表table12拼接起来。下面以......
  • buuoj-[WUSTCTF2020]Cr0ssfun
    1.64bitnowinexe直接打开2.找到main函数当check(flag)这个函数==1的时候,才正确3.步入:耐心一点,一个一个扣出来就行了。。。a1=[0]*33a1[10]=112a1[13]=6......
  • Windows 10 G 神州网信政府版
    ​神州网信政府版2018版:Win10CMGE_V0-H.1020.000.iso校验码:9484e568c6505f9c4ad5b9fcf7ec8d83588eebfb38089f53e3301112076fb7f2下载地址:https://download.cmgos.com/a......
  • CF992E Nastya and King-Shamans 题解
    传送门分析由于满足\(a_i\ge0\),所以\(s_i\)单调不减。当我们找到一个\(i\)时,不管\(i\)是否满足,下一个可能的一定大于等于\(a_i+s_{i-1}\)。而且\(a_i+s_{i-1}......