html5 template 教程,template method(模板方法)

本文探讨了如何通过模板方法模式实现在库和应用程序开发中,稳定部分与可变部分的分离。通过实例展示了如何将应用程序的步骤交给库来管理,并利用虚函数实现多态,提高灵活性。阅读了解如何优化代码结构,支持库和应用的扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.引入

94943b8e8fe29be2cff1045a092c837b.png

4f121ea05c7402a5791dd1c3cdacf2ca.png

c3bdbfd0c3450534160b42c2738f2783.png

e80e4a84559eb39b896f39c7b688f46c.png

0b4924e1e2ff196f2a0434394d500e96.png

3a2003ed6e2d235b4d6ffbdeee47d83f.png

二.template method(模板方法)

384c61b95b61a5555eb100d8c8760457.png

代码示例:

一开始的代码:

template1_app.cpp:

1 //应用程序开发人员

2 class Application{

3 public:

4 bool Step2(){

5 //...

6 }

7

8 void Step4(){

9 //...

10 }

11 };

12

13 int main()

14 {

15 Library lib;  //这里都是以类的方式来调用方法的

16 Application app;

17

18 lib.Step1();

19

20 if (app.Step2()){

21 lib.Step3();

22 }

23

24 for (int i = 0; i < 4; i++){

25 app.Step4();

26 }

27

28 lib.Step5();

29

30 }

对应的库的代码:

template1_lib.cpp:

1 //程序库开发人员

2 class Library{

3

4 public:

5 void Step1(){

6 //...

7 }

8

9 void Step3(){

10 //...

11 }

12

13 void Step5(){

14 //...

15 }

16 };

这里的主体程序流程,实际上框架开发者已经设计好了,常常是稳定的.

因此更好的解决方案是,库开发者把流程写好,一些需要开发者实现的接口定义好,留给开发者实现:

改进后的代码:

template2_lib.cpp:

1 //程序库开发人员

2 class Library{

3 public:

4 //稳定 template method

5 void Run(){

6

7 Step1();

8

9 if (Step2()) { //支持变化 ==> 虚函数的多态调用

10 Step3();

11 }

12

13 for (int i = 0; i < 4; i++){

14 Step4(); //支持变化 ==> 虚函数的多态调用

15 }

16

17 Step5();

18

19 }

20 virtual ~Library(){ }

21

22 protected:  //采用protected,让子类能够访问到.

23

24 void Step1() { //稳定

25 //.....

26 }

27 void Step3() {//稳定

28 //.....

29 }

30 void Step5() { //稳定

31 //.....

32 }

33

34 virtual bool Step2() = 0;//变化

35 virtual void Step4() =0; //变化

36 };

template2_app.cpp:

1 //应用程序开发人员

2 class Application : public Library {

3 protected:

4 virtual bool Step2(){

5 //... 子类重写实现

6 }

7

8 virtual void Step4() {

9 //... 子类重写实现

10 }

11 };

12

13

14

15

16 int main()

17 {

18 Library* pLib=new Application();

19 lib->Run();

20

21 delete pLib;

22 }

23 }

注意一下:

基类的析构函数要写成虚的,否则调用不到子类的析构函数,因为如果不是虚函数的话,

基类指针只能找到基类的析构函数,delete时只会调用基类的析构函数;而析构函数为虚函数时,则基类指针可以找到子类对应的析构函数.

69f1703effcb7206f449b0a84a60e90a.png

d149bb8b819576007ce51b2e3c0c6342.png

红色部分时稳定的,蓝色部分是变化的.

e54b990865d2fdbd2460ed3dca716483.png

01f8146c12f12913647e164d8d539a86.png

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[template method(模板方法)]http://www.zyiz.net/tech/detail-92254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值