• C++设计模式---模版方法模式


    1、介绍

    概念:

            模板方法模式(Template Method Pattern)【行为型模式】,定义一个操作中算法的骨架,而将一些步骤延迟到子类中模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    包含部分:

    (1)AbstractClass:抽象类

            在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个步骤,在其子类中可以重复定义并实现一个算法的各个步骤。

    (2)ConcreteClass:具体子类

            具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作。

    优点:

            (1)模板方法模式可以在子类中定义详细的处理算法时不会改变算法的结构。

            (2)是一种类库技术,提取累的公共行为,将公共行为放在父类中,而通过其子类可以实现不同的行为。

            (3)提供了一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展而增加新行为。

    缺点:

            每个不同的实现都需要定义一个子类,会导致子类数量的增加。

    2、示例

    在车管所给电动车、机动车办理车证业务。

    1. #include
    2. class CarTemplateMethod // 车管所办理业务
    3. {
    4. public:
    5. void takeNumber(){ // 取号
    6. std::cout << "take a number" << std::endl;
    7. }
    8. virtual void transact() = 0; // 办理业务。具体的业务流程在子类中实现
    9. void evaluate() // 反馈评分
    10. {
    11. std::cout << "Feedback rating" << std::endl;
    12. }
    13. void process() // 办理具体业务
    14. {
    15. takeNumber();
    16. transact();
    17. evaluate();
    18. std::cout << "===============================" << std::endl;
    19. }
    20. };
    21. class ElectricVehicle:public CarTemplateMethod // 电动车办证
    22. {
    23. virtual void transact()
    24. {
    25. std::cout << "take Electric Vehicle service" << std::endl;
    26. }
    27. };
    28. class MotorVehicle:public CarTemplateMethod // 机动车办证
    29. {
    30. virtual void transact()
    31. {
    32. std::cout << "take Motor Vehicle service" << std::endl;
    33. }
    34. };
    35. int main()
    36. {
    37. CarTemplateMethod* carTemplateMethod= new ElectricVehicle();
    38. carTemplateMethod->process();
    39. carTemplateMethod= new MotorVehicle();
    40. carTemplateMethod->process();
    41. delete carTemplateMethod;
    42. return 0;
    43. }

    结果:

    1. take a number
    2. take Electric Vehicle service
    3. Feedback rating
    4. ===============================
    5. take a number
    6. take Motor Vehicle service
    7. Feedback rating
    8. ===============================
  • 相关阅读:
    110. SAP UI5 FileUploader 控件深入介绍 - 为什么需要一个隐藏的 iframe
    [iOS]App Store Connect添加银行卡时的CNAPS代码查询
    浅略/逐行分析园区网接入交换机配置(以Ruijie交换机为例)
    PPT导出PDF时保持图像高清的方法
    掌握时间复杂度, 编写高效代码
    14:00面试,14:06就出来了,问的问题有点变态。。。
    PostgreSQL数据库----pgAdmin客户端工具的使用
    文件上传下载
    python使用鼠标在图片上画框
    MySql 终端常用指令
  • 原文地址:https://blog.csdn.net/qq_34486832/article/details/139981980