template method模式

模板方法模式是一种设计模式,旨在定义操作中的算法框架,将具体步骤留给子类实现。适用于实现算法不变部分并允许子类扩展的场景。本文介绍了模板方法的意图、适用性和结构,并提供了C++代码示例,展示如何在`CAbstractClass`中定义模板方法,并在`CButton`和`CList`子类中实现具体操作。
摘要由CSDN通过智能技术生成

Template Method模式

一.    意图

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

二.    适用性

1.  一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现

2.  各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替代这些不同的代码。

3.  控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展。

三.    结构

 

 

      

四.    代码

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<vector>

#include<math.h>

 

usingnamespacestd;

//templatemethodmode

classCAbstractClass

{

public:

    //TemplateMethod

    voidDrawControl()

    {

        DrawText();

        DrawImage();

        DrawDeometry();

    }

protected:

    //PrimitiveOperation1

    virtualvoidDrawText(){}

    //PrimitiveOperation2

    virtualvoidDrawImage(){}

    //PrimitiveOperation3

    virtualvoidDrawDeometry(){}

};

 

classCButton:publicCAbstractClass

{

protected:

    virtualvoidDrawText()

    {

        cout<<"DrawButtonText"<<endl;

    }

    virtualvoidDrawImage()

    {

        cout<<"DrawButtonImage"<<endl;

    }

    virtualvoidDrawDeometry()

    {

        cout<<"DrawButtonDeometry"<<endl;

    }

};

 

classCList:publicCAbstractClass

{

protected:

    virtualvoidDrawText()

    {

        cout<<"DrawListText"<<endl;

    }

    virtualvoidDrawImage()

    {

        cout<<"DrawListImage"<<endl;

    }

    virtualvoidDrawDeometry()

    {

        cout<<"DrawListDeometry"<<endl;

    }

};

 

intmain()

{

    cout<<"HelloWorld!"<<endl;

 

    CButton*button=newCButton();

    CList*list=newCList();

 

    button->DrawControl();

    list->DrawControl();

 

    if(button!=NULL)

    {

        deletebutton;

        button=NULL;

    }

    if(list!=NULL)

    {

        deletelist;

        list=NULL;

    }

    return0;

}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值