模板方法模式(Template Method)案例分析

案例分析:

一个支持在屏幕上绘图的类View。一个视图只有在进入焦点状态后时才可以设定合适的特定绘图状态,因而只有成为“焦点”之后才可以进行绘图。View类强制其子类遵循这个规则。我们用Display模板方法来解决这个问题。View定义两个具体方法,SetFocus和ResetFocus,分别设定和清除绘图状态。 View的Dodisplay钩子操作实施真正的绘图功能。

 

意图:

定义一个操作中算法的框架,将一些步骤延迟到其子类中。这里就是将绘图的具体工作,延迟到View类的派生类中。

 

结构图:

 

 

程序代码:

#include <iostream.h>

 

class View

{

public:

    void Display()

     {

     //   cout<<"模版方法定义算法框架"<<endl;

        SetFocus();

         Dodisplay();

         ResetFocus();

     }

     void SetFocus()

     {

         cout<<"获得焦点"<<endl;

     }

     void ResetFocus()

     {

         cout<<"失去焦点"<<endl;

     }

     virtual void Dodisplay()

     {

         cout<<"基类绘图函数"<<endl;

     }

};

class FlashView:public View

{

public:

     void Dodisplay()

     {

         cout<<"实现falsh绘图"<<endl;

     }

};

class PhotoShopView:public View

{

public:

     void Dodisplay()

     {

         cout<<"实现photoshop绘图"<<endl;

     }

};

int main()

{

     View* pview=new FlashView;

     pview->Display();

 

     pview=new PhotoShopView;

     pview->Display();

 

     return 1;

}

 

运行结果:

获得焦点

实现falsh绘图

失去焦点

获得焦点

实现photoshop绘图

失去焦点

Press any key to continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值