模板方法模式

模板模式

模板模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

当多个类有相同的方法,并且逻辑相同,只是细节上有差异时,可以考虑使用模板模式。具体的实现上可以将相同的核心算法设计为模板方法,具体的实现细节有子类实现。

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

举例:以生产电脑为例,电脑生产的过程都是一样的,只是一些装配的器件可能不同而已,我们都知道生产电脑需要Cpu、内存、显卡等待,但是Cpu、内存、显卡的型号显然是可以各不相同的,所以我们可以在电脑基类中定义安装Cpu、内存、显卡等待的虚函数,每当我们需要一台不同型号的电脑,就重新写一个子类,重写这些虚函数
关键代码

  • 模板方法:在抽象父类中定义,调用抽象方法和具体方法。
  • 抽象方法:由子类实现,代表算法的可变部分。
  • 具体方法:在抽象父类中实现,代表算法的不变部分。
#include<iostream>

using namespace std;

class Computer
{
public:
    void product()
    {
        installCpu();
        installRam();
        installGraphicsCard();
    }
protected:
    virtual void installCpu() = 0;
    virtual void installRam() = 0;
    virtual void installGraphicsCard() = 0;
};

class ComputerA :public Computer
{
protected:
    virtual void installCpu() override
    {
        cout << "ComputerA install Cpu Core i7" << endl;
    }
    virtual void installRam() override
    {
        cout << "ComputerA install 16G Ram" << endl;
    }
    virtual void installGraphicsCard() override
    {
        cout << "ComputerA install RTX3070 GraphicsCard" << endl;
    }
};

class ComputerB :public Computer
{
protected:
    virtual void installCpu() override
    {
        cout << "ComputerB install Cpu Core i9" << endl;
    }
    virtual void installRam() override
    {
        cout << "ComputerB install 64G Ram" << endl;
    }
    virtual void installGraphicsCard() override
    {
        cout << "ComputerB install RTX4090 GraphicsCard" << endl;
    }
};

int main()
{
    ComputerA* ca = new ComputerA();
    ca->product();
    ComputerB* cb = new ComputerB();
    cb->product();

    delete cb;
    cb = nullptr;
    delete ca;
    ca = nullptr;
    return 0;
}

运行结果如下
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值