行为型模型 模版模式

行为型模型 模版模式

应用场景

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;
}
时间: 2024-11-08 03:37:08

行为型模型 模版模式的相关文章

行为型模型 迭代器模式

行为型模型 迭代器模式 GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示. 为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口. Iterator(迭代器接口):         该接口必须定义实现迭代功能的最小定义方法集         比如提供hasNext()和next()方法. ConcreteIterator(迭代器实现类):         迭代器接口Iterator的实现类.可以根据具体情况加以实现. Aggregate(容器接口)

行为型模型 策略模式

行为型模型 策略模式 Strategy:        策略(算法)抽象. ConcreteStrategy         各种策略(算法)的具体实现. Context         策略的外部封装类,或者说策略的容器类.根据不同策略执行不同的行为.策略由外部环境决定. 好处:         //算法的实现 和 客户端的使用 解耦合         //使得算法变化,不会影响客户端 适用于:         准备一组算法,并将每一个算法封装起来,使得它们可以互换. /** * 行为型模型

行为型模型 状态模式

行为型模型 状态模式 Context:用户对象        拥有一个State类型的成员,以标识对象的当前状态: State:接口或基类         封装与Context的特定状态相关的行为: ConcreteState:接口实现类或子类         实现了一个与Context某个状态相关的行为. 适用于:         对象的行为,依赖于它所处的当前状态.行为随状态改变而改变的场景. /** * 行为型模型 状态模式 * State模式也叫状态模式,是行为设计模式的一种. * St

行为型模型 命令模式

行为型模型 命令模式 Command         Command命令的抽象类. ConcreteCommand         Command的具体实现类. Receiver         需要被调用的目标对象. Invorker         通过Invorker执行Command对象. 适用于:         是将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. /** * 行为型模型 命令模式 * Command模

行为型模型 备忘录模式

行为型模型 备忘录模式 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式. 1)一个类需要保存它的对象的状态(相当于Originator角色) 2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色) 3)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存 4)undo或rollback操作时,通过Caretaker保存的Memento恢复Originator对象的状

行为型模型 空对象模式

行为型模型 空对象模式 /** * 行为型模型 空对象模式 * 创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方. * 不要为了屏蔽null而使用空对象,应保持用null,远比用非null的值来替代"无值"要好.(慎用) * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> void mytest() { return; } int m

行为型模型 责任链模式

行为型模型 责任链模式 Handler         处理类的抽象父类. concreteHandler         具体的处理类. 责任链优缺点 优点:         1.责任的分担.每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则.         2.可以根据需要自由组合工作流程.如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程.         3.类与类之间可以以松耦合的形式加以组织.缺点:      

行为型模型 中介者模式

行为型模型 中介者模式 Mediator抽象中介者         中介者类的抽象父类. concreteMediator         具体的中介者类. Colleague         关联类的抽象父类. concreteColleague         具体的关联类. 适用于:         用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换. /** * 行为型模型 中介者模式 * Mediat

设计模式3 创建型模型

设计模式3 创建型模型 目录: 简单工厂模式 工厂方法模式 抽象工厂模式 单例模式 简单工厂 模型 [email protected]:~$ cat main.cpp  //设计模式:简单工厂 模型 #include<iostream> using namespace std; class Fruit { public: Fruit(string kind) { this->kind = kind; if(kind == "apple") {} else if (ki