首页 > 编程语言 >13.(行为型模式)java设计模式之模板模式

13.(行为型模式)java设计模式之模板模式

时间:2023-01-16 21:25:31浏览次数:53  
标签:13 void 模式 算法 抽象类 设计模式 public 模板

一、什么是模板模式

定义⼀个操作中的算法⻣架,将算法的⼀些步骤延迟到⼦类中,使得⼦类可以不改变该算法结构的情况下重定义该算法的某些特定步骤,属于⾏为型模式

二、模板模式的实现方式

模式结构分析:

  • 抽象模板(Abstract Template):定义一个模板方法,这个模板方法一般是一个具体方法,给出一个顶级算法骨架,而逻辑骨架的组成步骤在相应的抽象操作中,推迟到子类实现。
    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
    • 基本方法:是整个算法中的一个步骤,包括抽象方法和具体方。
      • 抽象方法:在抽象类中申明,由具体子类实现。|具体方法︰在抽象类中已经实现,在具体子类中可以继承或重写它。
      • 具体模板(Concrete Template):实现父类所定义的一个或多个抽象方法,它们是一个顶级算法逻辑的组成步骤。
  • 具体模板(Concrete Template):实现⽗类所定义的⼀个或多个抽象⽅法,它们是⼀个顶级算法逻辑的组成步骤。

类关系图:

统一模型:

代码实现:

查看代码
 /*
* 凭证模板的抽象类
* */
public abstract class VoucherAbstractClass {
    /**
     * 模版⽅法
     */
    public void templateMethod() {
        specificMethod();
        buildVoucherHeader();
        buildVoucherBody();
    }
    /**
     * 具体⽅法
     */
    public void specificMethod() {
        System.out.println("抽象类中的具体⽅法被调⽤");
    }
    // 抽象⽅法1
    public abstract void buildVoucherHeader();
    // 抽象⽅法2
    public abstract void buildVoucherBody();
}
/*
* 收入凭证
* */
public class IncomeVoucher  extends VoucherAbstractClass{
    @Override
    public void buildVoucherHeader() {
        System.out.println("这个是收入的头");
    }

    @Override
    public void buildVoucherBody() {
        System.out.println("这个是收入的身体");
    }
}
/*
* 成本凭证
* */
public class CostVoucher extends VoucherAbstractClass{
    @Override
    public void buildVoucherHeader() {
        System.out.println("这个是成本的头");
    }

    @Override
    public void buildVoucherBody() {
        System.out.println("这个是成本的身体");
    }
}

测试用例:

/*
*模板模式
* */
@Test
public void templateVoucher(){
    VoucherAbstractClass incomeVoucher=new IncomeVoucher();
    incomeVoucher.templateMethod();
    VoucherAbstractClass costVoucher=new CostVoucher();
    costVoucher.templateMethod();
}

测试结果:

抽象类中的具体⽅法被调⽤
这个是收入的头
这个是收入的身体
抽象类中的具体⽅法被调⽤
这个是成本的头
这个是成本的身体

方法评估:

模板方法模式和建造者模式区别:
两者很大的交集,建造者模式比模板方法模式多了一个指挥类,该类体现的是模板方法模式中抽象类的固定算法的功能,是一个创建对象的固定算法。

优点:

  • 扩展性好,对不变的代码进⾏封装,对可变的进⾏扩展,符合开闭原则。
  • 提⾼代码复⽤性将相同部分的代码放在抽象的⽗类中,将不同的代码放⼊不同的⼦类中。
  • 通过⼀个⽗类调⽤其⼦类的操作,通过对⼦类的具体实现扩展不同的⾏为,实现了反向控制。

缺点:

每一个不同的实现都需要一个子类来实现,导致类的个数增加,会使系统变得复杂。

标签:13,void,模式,算法,抽象类,设计模式,public,模板
From: https://www.cnblogs.com/q994321263/p/17053568.html

相关文章

  • 学习记录-迭代器模式
    迭代器模式迭代器模式(IteratorPattern)是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式......
  • 学习记录-备忘录模式
    备忘录模式备忘录模式(MementoPattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内......
  • 14.(行为型模式)java设计模式之策略模式
    一、什么是策略模式  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可......
  • 创建设计模式
    一、前言最近看了一些有关设计模式的相关书籍和博客,学习了几种常用的设计模式,归纳总结一下学习笔记。二、什么是创建型设计模式?在软件工程中,创建型设计模式是处理对象创......
  • 2023/1/16 20221321杨渝学习打卡
    python入门学习学习链接:https://www.bilibili.com/video/BV14r4y1k7F9/?spm_id_from=333.999.0.0&vd_source=a989a1afa6cb8b6527dd9bf059d71439字典的循环打印(解构)字典......
  • ABB 800XA学习笔记13:系统架构5
    这一片学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记13:系统架构5_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失接着学习。1.3.3直观的导航......
  • Docker网络模式
    Docker网络作用:容器间的互联和通信以及端口映射,容器IP变动时候可以通过服务名直接网络通信而不受到影响常用基本命令dockernewwork--helpdockernetworkls#查看网络......
  • 文明6铂金版 mac(策略游戏) v1.3.13中文激活版
    文明6是人气颇高的《文明》系列中的经典作品,共有20位史上著名的领袖任君挑选,包括秦始皇。全新扩展包中,科技与市政树已扩展至未来时代,玩家们可在8个新文明与9位新领袖中进行......
  • daily study 13
    4.赋值操作符=,+=,-=,*=....复合赋值,一个=为赋值,==为判断支持连续赋值,从右赋到左5.单目操作符!,-,+,&,sizeof,~(对一个数的二进制位按位取反),--,++,*(间接访问操作符)sizeof(a),计算a所占字......
  • 1813. Sentence Similarity III
    1813.SentenceSimilarityIIIAsentenceisalistofwordsthatareseparatedbyasinglespacewithnoleadingortrailingspaces.Forexample,"HelloWorld"......