zoukankan      html  css  js  c++  java
  • 行为型模型 模版模式

    行为型模型 模版模式

    应用场景

    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;
    }
  • 相关阅读:
    .Net利用core实现简单的加解密例程全解析
    HTTPS抓包,利用telnet检查网络连接的几种方式
    每个人都应该知道的(cJSON)JSON处理库
    HashMap和Hashtable的区别
    Map集合
    Set集合
    同步异步以及泛型
    ArrayList的输出方式以及因子增长数
    (转)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
    数据结构复习---最短路径
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782719.html
Copyright © 2011-2022 走看看