【设计模式】模板方法模式

 

模板方法模式

 

一个父类【运动会】类

两个子类,一个【CClass1】类,一个【CClass2】类,班级类是运动会类的子类,父类制定了运动会的流程(算法的逻辑架构),子类分别去实现流程中的具体实现。

子类不需要重写流程,只需要重写流程中每一项的具体内容。

以此为例,流程就是先干什么、后干什么、再干什么,而每一项就是分别干的内容。

 

 

复制代码
/************************************************************************
设计模式
模板方法模式

模板方法的大概思想是:父类指定某种流程或规则,每个子类在为该流程制定详细的工作。

下面demo以运动会为例,上学的时候开运动会的日子还是比较开心的,因为不用上课。
运动会总是有一定的流程的,比如每个有班级进场、团队展示、运动员比赛、写稿子
等等。

************************************************************************/

//【运动会】类
class CSportsMeeting
{
public:
    CSportsMeeting(string strClassName);
    virtual ~CSportsMeeting();
    virtual void Jinchang() = 0;  //进场
    virtual void Zhanshi() = 0;   //展示,子类去重写这两个虚函数的实现

    //运动会流程,子类不需要重写此函数,这个函数指定了流程和逻辑框架
    void SportsSchedule();        

protected:
    string m_strClassName;  //班级名
};

CSportsMeeting::CSportsMeeting(string strClassName) : m_strClassName(strClassName){}
CSportsMeeting::~CSportsMeeting(){}
void CSportsMeeting::SportsSchedule()
{
    //进场
    Jinchang();

    //展示
    Zhanshi();
}
复制代码

 

 

 

复制代码
//【班级1类】
class CClass1 : public CSportsMeeting
{
public:
    CClass1(string strClassName);
    virtual ~CClass1();
    virtual void Jinchang();
    virtual void Zhanshi(); 
};

CClass1::CClass1(string strClassName) : CSportsMeeting(strClassName){}
CClass1::~CClass1(){}
void CClass1::Jinchang()
{
    cout << "班级 " <<m_strClassName<<" 进场啦,哈哈\r\n";
}

void CClass1::Zhanshi()
{
    cout << "班级 " << m_strClassName<<" 展示啦,我们是风骚型的啦!\r\n";
}

//////////////////////////////////////////////////////////////////////////

//【班级2类】
class CClass2 : public CSportsMeeting
{
public:
    CClass2(string strClassName);
    virtual ~CClass2();
    virtual void Jinchang();
    virtual void Zhanshi(); 
};

CClass2::CClass2(string strClassName) : CSportsMeeting(strClassName){}
CClass2::~CClass2(){}

void CClass2::Jinchang()
{
    cout << "班级 "<<m_strClassName<< " 进程啦,都看过来!\r\n";
}

void CClass2::Zhanshi()
{
    cout << "班级 "<<m_strClassName<<" 展示啦,我们是呆萌型的,么么哒!\r\n";
}
复制代码

 

 

 客户端代码

客户端用子类去实例化每个具体的类,然后将指针赋值给父类指针,父类指针去调用父类的未重写的函数SportsShedule,在此函数中调用的函数为被子类重写了虚函数。

复制代码
int _tmain(int argc, _TCHAR* argv[])
{
    CSportsMeeting* pSport = new CClass1("三年二班");
    pSport->SportsSchedule();

    cout<<endl<<endl;

    CSportsMeeting* pSport2 = new CClass2("高三四班");
    pSport2->SportsSchedule();


    cout<<endl<<endl;

    return 0;
}
复制代码

 

 

 

 执行结果如下

 

 

 

  

posted on   崔好好  阅读(212)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示