设计模式(14)-模板模式

来源:互联网 发布:书生商友推广软件 编辑:程序博客网 时间:2024/06/08 05:52

模板模式

  模板模式属于行为模式,其特点是定义了一个操作中的算法架构,将其中一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

代码

  此处以基于HTTP协议下载文件和基于SOAP协议下载文件的过程来说明模板模式,下载文件一般包括了开始下载、下载中、下载完成3个步骤,因此父类可以据此定义架构,而具体不同协议在不同步骤中所需要完成的内容则延迟到子类中完成。

C++代码

  文件结构:
  —include
  ——FileOperation.h
  ——HTTPFileOperation.h
  ——SOAPFileOperation.h
  —src
  ——FileOperation.cpp
  ——HTTPFileOperation.cpp
  ——SOAPFileOperation.cpp
  ——main.cpp
  代码如下:
  —include/FileOperation.h

#ifndef _FILEOPERATION_H_#define _FILEOPERATION_H_class FileOperation{public:    virtual ~FileOperation();    void DownloadFile();protected:    virtual void DoBeginDownload()=0;    virtual void DoDownload()=0;    virtual void DoEndDownload()=0;};#endif

  —include/HTTPFileOperation.h

#ifndef _HTTPFILEOPERATION_H_#define _HTTPFILEOPERATION_H_#include"FileOperation.h"class HTTPFileOperation:public FileOperation{protected:    virtual void DoBeginDownload();    virtual void DoDownload();    virtual void DoEndDownload();};#endif

  —src/SOAPFileOperation.h

#ifndef _SOAPFILEOPERATION_H_#define _SOAPFILEOPERATION_H_#include"FileOperation.h"class SOAPFileOperation:public FileOperation{protected:    virtual void DoBeginDownload();    virtual void DoDownload();    virtual void DoEndDownload();};#endif

  —src/FileOperation.cpp

#include"FileOperation.h"FileOperation::~FileOperation(){    ;}void FileOperation::DownloadFile(){    DoBeginDownload();    DoDownload();    DoEndDownload();}

  —src/HTTPFileOperation.cpp

#include<iostream>#include"HTTPFileOperation.h"using namespace std;void HTTPFileOperation::DoBeginDownload(){    cout<<"基于HTTP协议开始下载文件"<<endl;}void HTTPFileOperation::DoDownload(){    cout<<"基于HTTP协议下载文件中..."<<endl;}void HTTPFileOperation::DoEndDownload(){    cout<<"基于HTTP协议下载文件完成"<<endl;}

  —src/SOAPFileOperation.cpp

#include<iostream>#include"SOAPFileOperation.h"using namespace std;void SOAPFileOperation::DoBeginDownload(){    cout<<"基于SOAP协议开始下载文件"<<endl;}void SOAPFileOperation::DoDownload(){    cout<<"基于SOAP协议下载文件中..."<<endl;}void SOAPFileOperation::DoEndDownload(){    cout<<"基于SOAP协议下载文件完成"<<endl;}

  —src/main.cpp

#include<iostream>#include<memory>#include"HTTPFileOperation.h"#include"SOAPFileOperation.h"using namespace std;int main(){    shared_ptr<FileOperation> httpFile = make_shared<HTTPFileOperation> ();    shared_ptr<FileOperation> soapFile = make_shared<SOAPFileOperation> ();    httpFile->DownloadFile();    soapFile->DownloadFile();    return 0;}

Python代码

  文件结构:
  —FileOperation.py
  代码如下:
  —FileOperation.py

# -*- coding:utf-8 -*-class FileOperation:    def DownloadFile(self):        self._DoBeginDownload()        self._DoDownload()        self._DoEndDownload()    def _DoBeginDownload(self):        pass    def _DoDownload(self):        pass    def _DoEndDownload(self):        passclass HTTPFileOperation(FileOperation):    def _DoBeginDownload(self):        print "基于HTTP协议开始下载文件"    def _DoDownload(self):        print "基于HTTP协议下载文件中..."    def _DoEndDownload(self):        print "基于HTTP协议下载文件完成"class SOAPFileOperation(FileOperation):    def _DoBeginDownload(self):        print "基于SOAP协议开始下载文件"    def _DoDownload(self):        print "基于SOAP协议下载文件中..."    def _DoEndDownload(self):        print "基于SOAP协议下载文件完成"if "__main__" == __name__:    httpFile = HTTPFileOperation()    soapFile = SOAPFileOperation()    httpFile.DownloadFile()    soapFile.DownloadFile()
0 0
原创粉丝点击