首页 > 其他分享 >模板设计模式

模板设计模式

时间:2024-07-17 17:57:44浏览次数:15  
标签:子类 void Cooking System protected 设计模式 模板

模板模式(Template Pattern)是一种行为设计模式,它在一个方法中定义一个操作的骨架,而将一些步骤的实现延迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

模板模式的组成部分

  1. 抽象类(Abstract Class):

    • 定义算法的骨架,并包含一个模板方法。
    • 模板方法定义了算法的顺序。
    • 抽象类可以包含一些具体方法和一些抽象方法。
  2. 具体类(Concrete Class):

    • 继承自抽象类,实现抽象方法。
    • 实现算法中不同的步骤。

例子

以下是一个简单的例子,展示如何使用模板模式来实现不同的烹饪过程:

// 抽象类
abstract class Cooking {
    // 模板方法
    public final void cook() {
        prepareIngredients();
        cookDish();
        serveDish();
    }

    // 基本步骤,子类需要实现
    protected abstract void prepareIngredients();
    protected abstract void cookDish();
    
    // 具体步骤,所有子类共享
    protected void serveDish() {
        System.out.println("Dish is served.");
    }
}

// 具体类1
class PastaCooking extends Cooking {
    @Override
    protected void prepareIngredients() {
        System.out.println("Preparing pasta ingredients.");
    }

    @Override
    protected void cookDish() {
        System.out.println("Cooking pasta.");
    }
}

// 具体类2
class RiceCooking extends Cooking {
    @Override
    protected void prepareIngredients() {
        System.out.println("Preparing rice ingredients.");
    }

    @Override
    protected void cookDish() {
        System.out.println("Cooking rice.");
    }
}

// 客户端代码
public class TemplateMethodDemo {
    public static void main(String[] args) {
        Cooking pasta = new PastaCooking();
        pasta.cook();
        
        Cooking rice = new RiceCooking();
        rice.cook();
    }
}

使用场景

  1. 多个类有相同的方法,但是实现不同。
  2. 重要的、复杂的方法可以由多个子类实现,但是子类之间有一些通用行为。
  3. 希望控制子类的扩展行为而不是完全自由地覆写整个方法。

标签:子类,void,Cooking,System,protected,设计模式,模板
From: https://www.cnblogs.com/zhao-zong-yu-hai/p/18307999

相关文章

  • 设计模式之抽象工厂模式(学习笔记)
    定义抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。抽象工厂模式将对象的创建过程抽象化,允许子类通过实现具体工厂类来定制对象的创建。为什么使用抽象工厂模式产品族的一致性抽象工厂模式确保同一产品族中的对......
  • 设计模式之代理模式
    定义代理模式(ProxyPattern)是软件工程中的一种设计模式,它属于结构型模式,用于在不直接访问实际对象的情况下,通过一个或多个代理对象来间接访问某个对象或执行某些操作。目的这种模式的主要目的是:控制访问:代理可以在访问真实对象之前或之后添加额外的操作,如权限检查、延迟初始......
  • 模板矩阵类
    template<size_trow,size_tcolumn,typenameT=XDecimal>classXMatrix{public:XMatrix():_row(row),_column(column){_vals=newT[row*column]{0.0};}virtual~XMatrix(){delete[]_va......
  • 带修莫队模板
    取分块大小\(n^\frac{2}{3}\)最优。例题:数颜色#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constintN=1e6+5;intcnt[N],a[N];structquery{intl,r,t,id;//加入时间戳};structmodfiy{intpos,val;};intmain(......
  • 基于Go1.19的站点模板爬虫教程
    以下是基于Go1.19的站点模板爬虫教程。我们将使用Go编程语言创建一个简单的网页爬虫,爬取指定网站的内容。我们将使用一些常见的Go库,例如net/http和golang.org/x/net/html,来处理HTTP请求和解析HTML。第一步:安装和设置安装Go:如果你还没有安装Go,请先从Go官方......
  • 易优CMS模板标签tags标签调用
    【基础用法】标签:tags描述:TAG调用用法:{eyou:tagssort='now'getall='0'loop='100'}<ahref='{$field.link}'>{$field.tag}</a>(文档数:{$field.total}){/eyou:tags}属性:aid=''文档ID,在内容页可以不设置该属性typeid=''栏......
  • 莫队模板
    #include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constintN=1e6+5;intcnt[N],a[N];structquery{intl,r,id;};intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;......
  • 设计模式之工厂模式(学习笔记)
    定义工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类来决定实例化哪一个类。工厂方法使得类的实例化延迟到子类,这样可以让客户端在不需要知道具体类的情况下创建对象。工厂方法模式通过使用继承和多态性,允许子类来控制对象的创建方式,能够更好地应对对象......
  • vue基础day01(MVVM、绑定、事件、结构模板)
    vue基础一、什么是vue构建用户界面的渐进式框架,采用自底向上逐层应用开发核心理念:数据驱动视图,组件化开发二、框架和库的区别框架:一套完整的解决方案,对项目的侵入性较大,项目如果需要更换框架,需要重新架构整个项目库:提供了一个小的功能,对项目的侵入性较小,如果某个库无......
  • 设计模式-C#实现简单工厂模式
    前言上一篇文章写了如何使用RabbitMQ做个简单的发送邮件项目,然后评论也是比较多,也是准备去学习一下如何确保RabbitMQ的消息可靠性,但是由于时间原因,先来说说设计模式中的简单工厂模式吧!在了解简单工厂模式之前,我们要知道C#是一款面向对象的高级程序语言。它有3大特性,封装、继承、......