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;
    }
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7782719.html
Copyright © 2011-2022 走看看