《模版模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


本章简要说明适配器模式。本文分为**++模式说明、本质思想、实践建议、代码示例++**四个部分。

模式说明

  • 方案: 模版模式定义了一个逻辑的骨架,将某些步骤推迟到子类中实现。父类定义了一个模版方法,该方法包含了算法的基本结构,而其中的某些步骤由子类实现。
  • 优点:
    • 提供了代码复用:将公共的算法逻辑放在父类中,避免了代码重复。
    • 提高了扩展性:子类可以通过实现特定的方法来改变算法的某些步骤,而不需要修改父类的代码。
  • 缺点:
    • 增加了类的数量:引入了多个子类来实现算法的不同部分,可能会增加类的数量和复杂性。
    • 子类必须遵循父类的模版:子类必须实现父类定义的抽象方法,这可能限制了子类的灵活性。

本质思想:在模版模式中,将逻辑的结构定义在一个父类中,而将具体的步骤实现延迟到子类中。这样可以在不改变算法整体结构的情况下,让子类自由地实现某些步骤,从而实现算法的定制化。

实践建议:十分推荐。在一个部门多个服务,且有相同部分可以抽象时,使用一个基类来约束大家的业务行为,不仅降低新人培养成本,也让不同人切换维护的服务成本更低。增加了团队效率。

代码示例:

cpp 复制代码
#include <iostream>

// 父类定义算法的骨架
class Bird {
public:
    void fly() {
        // 模版方法,定义了算法的骨架
        gatherMaterials();
        buildNest();
        layEggs();
        sitOnEggs();
    }

    // 抽象方法,需要由子类实现
    virtual void buildNest() = 0;
    virtual void layEggs() = 0;
    virtual void sitOnEggs() = 0;

    // 共同步骤可以在父类中实现
    void gatherMaterials() {
        std::cout << "Gathering materials for nest." << std::endl;
    }
};

// 子类实现具体的步骤
class Sparrow : public Bird {
public:
    void buildNest() override {
        std::cout << "Building a small nest." << std::endl;
    }

    void layEggs() override {
        std::cout << "Laying small eggs." << std::endl;
    }

    void sitOnEggs() override {
        std::cout << "Sparrow is sitting on eggs." << std::endl;
    }
};

// 另一个子类实现具体的步骤
class Eagle : public Bird {
public:
    void buildNest() override {
        std::cout << "Building a large nest." << std::endl;
    }

    void layEggs() override {
        std::cout << "Laying large eggs." << std::endl;
    }

    void sitOnEggs() override {
        std::cout << "Eagle is sitting on eggs." << std::endl;
    }
};

int main() {
    Sparrow sparrow;
    std::cout << "Sparrow lifecycle:" << std::endl;
    sparrow.fly();
    std::cout << std::endl;

    Eagle eagle;
    std::cout << "Eagle lifecycle:" << std::endl;
    eagle.fly();
    return 0;
}

/*
Output:
Sparrow lifecycle:
Gathering materials for nest.
Building a small nest.
Laying small eggs.
Sparrow is sitting on eggs.

Eagle lifecycle:
Gathering materials for nest.
Building a large nest.
Laying large eggs.
Eagle is sitting on eggs.
*/
相关推荐
是店小二呀40 分钟前
【优选算法 | 滑动窗口】滑动窗口算法:高效处理子数组和子串问题
c++·算法
小破农1 小时前
C++篇——继承
c++·笔记
努力学习的小廉1 小时前
我爱学算法之—— 二分查找(上)
开发语言·c++·算法
wqfhenanxc3 小时前
Mixing C++ and Rust for Fun and Profit 阅读笔记
c++·笔记·rust
R-G-B3 小时前
【MFC】 VS2022打开低版本的MFC,双击.rc文件,DIalog加载失败,页面弹窗fatal error RC***:cannot open*****
c++·mfc·vs打开较早版本mfc·双击.rc文件·dialog加载失败·fatal error rc·cannot open
敲上瘾3 小时前
基于Tcp协议的应用层协议定制
linux·运维·服务器·网络·c++·网络协议·tcp/ip
莹莹学编程—成长记4 小时前
string的模拟实现
服务器·c++·算法
lybugproducer4 小时前
创建型设计模式之:简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式
java·设计模式·建造者模式·简单工厂模式·工厂方法模式·抽象工厂模式·面向对象
喵先生!7 小时前
C++中的vector和list的区别与适用场景
开发语言·c++
xMathematics8 小时前
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
开发语言·c++·qt·计算机图形学·cmake·opengl