• 行为型模型 模版模式


    行为型模型 模版模式

    应用场景

    Template Method模式一般应用在具有以下条件 的应用中:
            - 具有统一的操作步骤或操作过程
            - 具有不同的操作细节
            - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同
    总结:
            在抽象类中统一操作步骤,并规定好接口;让子类实现接口。这样可以把各个具体的子类和操作步骤接耦合

    AbstractClass:
            抽象类的父类
    ConcreteClass:
            具体的实现子类
    templateMethod():
            模板方法
    method1()与method2():
            具体步骤方法

    /**
     * 行为型模型 模版模式
     * Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为
     *
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <iostream>
    #include <string>
    
    class MakeCar
    {
    public:
        virtual void makeHead() = 0;
        virtual void makeBody() = 0;
        virtual void makeTail() = 0;
        virtual ~MakeCar() {}
    
        // 把一组行为 变成一个模版
        void make()
        {
            makeHead();
            makeBody();
            makeTail();
        }
    };
    
    class MakeBus: public MakeCar
    {
    public:
        virtual void makeHead() override
        {
            std::cout << "bus 组装车头" << std::endl;
        }
        virtual void makeBody() override
        {
            std::cout << "bus 组装车身" << std::endl;
        }
        virtual void makeTail() override
        {
            std::cout << "bus 组装车尾" << std::endl;
        }
    };
    
    class MakeJeep: public MakeCar
    {
    public:
        virtual void makeHead() override
        {
            std::cout << "jeep 组装车头" << std::endl;
        }
        virtual void makeBody() override
        {
            std::cout << "jeep 组装车身" << std::endl;
        }
        virtual void makeTail() override
        {
            std::cout << "jeep 组装车尾" << std::endl;
        }
    };
    
    void mytest()
    {
        MakeCar * bus = new MakeBus();
        bus->make();
        MakeCar *jeep = new MakeJeep();
        jeep->make();
    
        delete bus;
        bus = nullptr;
        delete jeep;
        jeep = nullptr;
    
        return;
    }
    
    
    int main()
    {
        mytest();
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    linux 安装软件三种方法
    megalo -- 网易考拉小程序解决方案
    层叠上下文 Stacking Context
    关于document.write
    学习块格式化上下文(BlockFormattingContext)
    jQuery 源码分析 8: 回头看jQuery的构造器(jQuery.fn,jQury.prototype,jQuery.fn.init.prototype的分析)
    简化版的Flappy Bird开发过程(不使用第三方框架)
    jQuery 源码分析 7: sizzle
    jQuery 源码分析6: jQuery 基本静态方法(二)
    jQuery 源码分析5: jQuery 基本静态方法(一)
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782719.html
Copyright © 2020-2023  润新知