设计模式之模板方法模式、策略模式、命令设计模式
2015-09-17 12:47
337 查看
一、模板方法模式
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method)。
抽象模板(AbstractTemplate):1、定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作。2、定义并实现了一个模板方法。这个模板方法一般是一个具体方法,步骤在相应的抽象操作中,推迟到子类实现。
具体模板(Concrete Template):1、实现父类所定义的一个或多个抽象方法。2、每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现
二、策略模式
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。
抽象策略角色:策略类,通常由一个接口或者抽象类实现。
具体策略角色:包装了相关的算法和行为。
环境角色:持有一个策略类的引用,最终给客户端调用。
具体的实现方法:
首先,定义一个接口,在接口里有一个抽象的方法,可以叫做抽象决策。
然后,定义一些算法,分别用有一些类来实现这些接口,可以叫做具体策略类。
其次,定义一个类,将这些算法封装起来,可以叫做环境角色。
最后通过调用环境角色,在环境角色中分别调用具体策略类,实现最红的目的。
策略模式的好处是客户端不需要知道每一个算法具体的实现方法,只需要知道算法的名称,调用即可。
三、命令设计模式
GoF《设计模式》中说道:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。
ConcreteCommand类:Command类的实现类,对抽象类中声明的方法进行实现。
Client类:最终的客户端调用类。
Invoker类:调用者,负责调用命令。
Receiver类:接收者,负责接收命令并且执行命令。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method)。
抽象模板(AbstractTemplate):1、定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作。2、定义并实现了一个模板方法。这个模板方法一般是一个具体方法,步骤在相应的抽象操作中,推迟到子类实现。
具体模板(Concrete Template):1、实现父类所定义的一个或多个抽象方法。2、每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现
二、策略模式
GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。
抽象策略角色:策略类,通常由一个接口或者抽象类实现。
具体策略角色:包装了相关的算法和行为。
环境角色:持有一个策略类的引用,最终给客户端调用。
具体的实现方法:
首先,定义一个接口,在接口里有一个抽象的方法,可以叫做抽象决策。
然后,定义一些算法,分别用有一些类来实现这些接口,可以叫做具体策略类。
其次,定义一个类,将这些算法封装起来,可以叫做环境角色。
最后通过调用环境角色,在环境角色中分别调用具体策略类,实现最红的目的。
策略模式的好处是客户端不需要知道每一个算法具体的实现方法,只需要知道算法的名称,调用即可。
三、命令设计模式
GoF《设计模式》中说道:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。
ConcreteCommand类:Command类的实现类,对抽象类中声明的方法进行实现。
Client类:最终的客户端调用类。
Invoker类:调用者,负责调用命令。
Receiver类:接收者,负责接收命令并且执行命令。
相关文章推荐
- 动态加载
- 如何通过微信引流 让天猫店新品单日销售8000单?
- myeclipse tomcat启动项目出现 内存溢出
- Linux系统启动01-基本概念
- ZJUT 1587 日期滚动条 (博弈)
- C语言的一些习题
- .NET基础--Contains用法
- Android 反编译工具备忘
- OpenGL教程翻译 第十八课 漫反射光
- 写给自己的面试答案
- CMM与TMM讲解
- Raising Bacteria
- 配色教程,学习RGB配色,最简单的配色基础。
- 方法二:请将你班学生的姓名与考试分数录入到Map中,并按分数从高到低在控制台上打印出来。
- Voltage Translation for Analog to Digital Interface ADC
- Qt 学习之路:坐标系统
- mongodb的权限操作
- MDT 2013 Update 1预览版升级到正式版
- tomcat传输压缩 gzip
- mongodb安装与使用