您的位置:首页 > 编程语言 > C语言/C++

设计模式之模板方法模式 c++实现和详细分析

2014-07-05 17:26 806 查看
模板方法模式:采用继承的方式,将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。

简单说,就是尽量把各个子类中相同的地方提取出来放到一个抽象基类中,在子类中实现不同的细节。

适用性:

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

2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。

UML图:

                                           


代码:

#include<iostream>
using namespace std;
/******************************
模板设计模式c++样例
by hnust_xiehonghao
2014.7.5
******************************/
class TestPaper
{
public:
void show()
{
master();
printf("请问下面的选择题选哪个.... :A .. B .. C.. D..\n" );
ans();
}
virtual void ans() = 0;//卷子的答案
virtual void master() = 0;//卷子的主人
};

//A做的试卷
class TestPaperA:public TestPaper
{
public:
void master()
{
printf("小明\n");
}

void ans()
{
printf("D\n");
}
};

//B做的试卷
class TestPaperB:public TestPaper
{
public:
void master()
{
printf("大黑的\n");
}

void ans()
{
printf("C\n");
}
};

int main()
{
TestPaperA *A = new TestPaperA();
A->show();

TestPaperB *B = new TestPaperB();
B->show();
return 0;
}

模板方法模式获得一种反向控制结构效果,这也是面向对象系统的分析和设计中一个原则 DIP(依赖倒置:Dependency Inversion Principles)。其含义就是父类调用子类的操作(高层模块调用低层模块的操作),低层模块实现高层模块声明的接口。这样控制权在父类(高层模块),低层模块反而要依赖高层模块。

参考 :

          http://blog.csdn.net/lcl_data/article/details/9199961
          http://www.weixueyuan.net/view/1268.html

          大话设计模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: