- 浏览: 761526 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理.
钩子(hook):是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。
要点:
1.“模板方法“定义了算法的步骤,把这些步骤的实现延迟到子类
2.模板方法模式为我们提供了一种代码复用的重要技巧
3.模板方法的抽象类可以定义具体方法,抽象方法和钩子
4.抽象方法由子类实现
5.钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它
6.为了防止子类改变模板方法中的算法,可以将模板方法声明为const
7.好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块
8.策略模式和模板方法模式都封装算法,一个用组合,一个用继承
9.工厂方法是模板方法的一种特殊版本
设计原则:
别找我,我会找你,由超类主控一切,当它们需要的时候,自然会去调用子类,这就跟好莱坞一样
CaffeineBeverage.h
Coffee.h
main.cpp
来个简化版:
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理.
钩子(hook):是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。
要点:
1.“模板方法“定义了算法的步骤,把这些步骤的实现延迟到子类
2.模板方法模式为我们提供了一种代码复用的重要技巧
3.模板方法的抽象类可以定义具体方法,抽象方法和钩子
4.抽象方法由子类实现
5.钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它
6.为了防止子类改变模板方法中的算法,可以将模板方法声明为const
7.好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块
8.策略模式和模板方法模式都封装算法,一个用组合,一个用继承
9.工厂方法是模板方法的一种特殊版本
设计原则:
别找我,我会找你,由超类主控一切,当它们需要的时候,自然会去调用子类,这就跟好莱坞一样
CaffeineBeverage.h
#ifndef CAFFEINEBEVERAGE_H #define CAFFEINEBEVERAGE_H #include <iostream> using namespace std; class CaffeineBeverage{ public: virtual void boilWater()const{ cout << "boil water" << endl; } virtual void brew()const=0; virtual void pourInCup()const{ cout << "pour in cup" << endl; } virtual void addCondiments()const=0; //this is a hook virtual bool needCondiments(){ return true; } void prepareRecipe(){ boilWater(); brew(); pourInCup(); if(needCondiments()){ addCondiments(); } } }; #endif // CAFFEINEBEVERAGE_H
Coffee.h
#ifndef COFFEE_H #define COFFEE_H #include "CaffeineBeverage.h" class Coffee:public CaffeineBeverage{ public: void brew()const{ cout << "Dripping Coffee through filter" << endl; } void addCondiments()const{ cout << "Adding sugar" << endl; } }; #endif // COFFEE_H
#ifndef TEA_H #define TEA_H #include "CaffeineBeverage.h" #include <string> class Tea:public CaffeineBeverage{ public: void brew()const{ cout << "steeping the tea" << endl; } void addCondiments()const{ cout << "Adding Lemond" << endl; } bool needCondiments(){ string t; cout << "Need a Lemond?Y:N" << endl; cin >> t ; if(t=="y"||t=="Y") return true; return false; } }; #endif // TEA_H
main.cpp
#include "CaffeineBeverage.h" #include "Coffee.h" #include "Tea.h" int main() { CaffeineBeverage* cb = new Tea; cb->prepareRecipe(); cb = new Coffee; cb->prepareRecipe(); } boil water steeping the tea pour in cup Need a Lemond?Y:N N Adding Lemond boil water Dripping Coffee through filter pour in cup Adding sugar
来个简化版:
class Interface { public: virtual void method0()=0; void method1(){}; void method2(){}; void method3(){}; void method4(){}; }; class A:public Interface { void method0(){} }; class Model { public: Model(){ m = new A; } ~Model(){} void run() { m->method0(); m->method1(); m->method2(); m->method3(); m->method4(); } private: Interface* m; }; int main() { Model model; model.run(); }
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 813桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 830访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 673解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 632享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 441中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 582职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 585合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 430组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 558备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
事件委托(delegate)
2014-07-23 20:53 592委托机制的本质就是调用成员函数的函数指针,实现回调 委托就是 ... -
建造者模式(Builder)
2014-07-23 20:45 561建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 623外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 403迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 508原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 333里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 390依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 557开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 554单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 1009MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 921代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ...
相关推荐
模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...
模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...
模板方法模式(Template Pattern)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类重新定义或改变某些基本操作,但整体结构和顺序保持不变。在Java编程中,...
模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式的主要目的是定义一个操作的框架,允许子类在不改变整体结构的情况下重定义具体步骤。这有助于保持代码的整洁,实现代码复用,并...
- **抽象类(Abstract Class)**:包含一个或多个抽象方法,并且有一个模板方法(template method)。模板方法通常被声明为final,这意味着它不能被子类覆盖。 - **具体操作(Concrete Operations)**:在抽象类中...
4. **模板方法(Template Method)**:定义了算法的基本步骤,调用各个步骤的方法,可以是抽象的也可以是具体的方法。 下面是一个简单的Java模板方法模式示例,以饮料制作过程为例: ```java public abstract ...
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
3. **模板方法(Template Method)**:在抽象类中定义的,它是一个具体方法,负责组织和控制算法的流程。模板方法通常包含了业务逻辑的主要流程,并调用了其他基本方法。 4. **钩子方法(Hook Methods)**:可选的...
2. 模板方法(TemplateMethod):这是核心方法,定义了算法的整体结构,调用了抽象方法和具体方法。 3. 具体方法(ConcreteMethod):这些方法在抽象类中已经完全实现,子类不需要关心这部分代码。 例如,假设我们...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
在模板模式中,一个抽象类公开定义了执行它的方法的方式,而将具体实现延迟到子类中。这种方式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板模式的核心结构包括抽象类(AbstractClass)...
4. 模板方法(Template Method):定义了算法的基本结构,包括一系列步骤,这些步骤可能包含直接调用的钩子方法。模板方法通常是不可变的,确保算法的总体流程不会被子类改变。 在iOS应用开发中,模板方法模式的...
9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合...
### 模板模式 (Template Pattern) #### 一、概述 模板模式是一种常用的行为设计模式,其核心在于定义了一个算法的框架,并允许子类提供具体的实现细节。通过这种方式,子类可以继承并重写某些方法,但整个算法的...
在软件设计模式的世界里,工厂模式和模板方法模式是两种常用的设计模式,它们都有各自的优点和应用场景。这两种模式都是面向对象设计原则的体现,能够帮助我们编写出更加灵活、可扩展的代码。让我们来深入探讨一下这...
首先,我们可以创建一个抽象类`AbstractTestPaper`,其中包含一个模板方法(Template Method),这个方法定义了试题呈现的基本流程,而具体的试题内容则通过钩子方法(Hook Method)来实现。钩子方法在模板方法中被...
在"template-method-demo"这个示例中,我们可以预见到它将展示如何在Java中应用模板方法模式。这个压缩包可能包含以下内容: 1. 一个抽象类(例如:`AbstractClass`),它定义了模板方法。在这个类中,可能会有一个...
模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...
设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...