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;
    }
  • 相关阅读:
    模板模式变形
    理解volatitle带来的可见性
    数据库隔离级别
    Spring对POST内容进行处理的坑
    动态加载JS和CSS
    MySQL性能优化总结
    JS自执行匿名函数
    CDATA为何物?
    如何编写高效的jQuery代码
    war和war exploded区别
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782719.html
Copyright © 2011-2022 走看看