设计模式(八)之模板方法模式

模板方法模式的定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

当对一个项目进行重构的时候,往往都会把相似的代码进行优化,将其中共同的部分抽取出来,放进一个基类中,这样一说是不是又觉得像一种编程习惯呢。下面用简单、通俗的例子来说明吧。

做Android项目的时候,经常要对访问服务端数据,为了比较好说这个设计模式,我就用android-async-http-1.4.4.jar的开源框架来请求后台,用过这个框架的同学肯定都知道,每当我们要请求服务端的时候,经常得像下面这么写:

		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("param1", "param1");
		params.put("param2", "param2");
		client.post(URL, params, new AsyncHttpResponseHandler() {

			@Override
			public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
				// 请求成功回调
			}

			@Override
			public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
				// 请求失败回调
			}
		});

虽然这样写没错,但是一个项目不可能只请求一次后台吧,夸张点说如果有100处需要请求后台,那将会出现很多冗余的代码,所以想到了抽取,于是我们队AsyncHttpResponseHandler接口进行封装,代码如下:

public abstract class MyResponseHandler extends AsyncHttpResponseHandler{

	@Override
	public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
		if (statusCode == 200) {
			successCallBack(responseBody);
		}
	}

	@Override
	public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
		failCallBack();
	}

	public abstract void successCallBack(byte[] responseBody);

	public abstract void failCallBack();
}

我们将两个回调接口进行了封装,让实现类的代码尽量变得灵活,简洁些,当我们再次请求服务端的时候,我们的代码将变成这样:

		AsyncHttpClient client = new AsyncHttpClient();
		RequestParams params = new RequestParams();
		params.put("param1", "param1");
		params.put("param2", "param2");
		client.post(URL, params, new MyResponseHandler() {

			@Override
			public void successCallBack(byte[] responseBody) {

			}

			@Override
			public void failCallBack() {

			}
		});
	}

然后我也开始质疑了,怎么代码也是这么多,NO~NO~NO~,在计算机领域请相信质变这种事情时刻在发生,我相信很多工作过的人都知道一个项目的维护费用往往比开发一个项目的费用高的多,所以一个灵活,简洁的封装可让项目在后期的维护更方便。再打个比方,我们请求服务端之后的返回码肯定不止一个吧,如果是直接写在没封装前的方法中,按不也是多了很多冗余代码嘛,我们甚至可以在封装的接口中进一步封装,让代更健壮写,经得起改。

时间: 2024-08-11 12:32:53

设计模式(八)之模板方法模式的相关文章

设计模式C++实现——模板方法模式

模式定义: 模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板就是一个方法.更具体的说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类实现.这可以确保算法的结果保持不变,同时由子类提供部分实现. 模式结构: 举例: 泡咖啡和泡茶步骤与基本相同,定义咖啡和茶的类如下: class Coffee { public: void prepareRecipe() { boilWater(

设计模式--15、模板方法模式

设计模式学习笔记-模板方法模式 1. 概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 2. 模式中的角色 2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架. 2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法. 3. 模式解读 3.1 模板方法类图 3.2 模板方法模式代码实现 /// <summary> /// 抽象类 /// </summa

设计模式入门之模板方法模式TemplateMethod

模板方法模式定义: 定义一个算法的骨架,而将步骤延迟到子类中.这种模式可以使得在不改变算法骨架(模板)的情况下修改每个步骤的具体实现 从功能上来看,这个模式跟生成器模式有些相像,只不过生成器模式定义了创建对象的过程,而模板方法模式定义了算法过程 感觉这个模式要简单很多. 钩子:可以被子类覆盖以实现扩展的方法通常叫做钩子 实例:用户登录过程,分为后台人员登录和用户登录,这是一个非常成型的技术过程,是非常典型的模板方法模式的应用,其中普通用户密码不需要加密,而工作人员的密码需要进行加密比对.上代码

设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. 二.模板方法模式的应用场景 Template Method模式一般应用在具有以下条件的应用中: - 具有统一的操作步骤或操作过程 - 具有不同的操作细节 - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同 private static void Main(string[] arg

C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】

原文:C#设计模式之十三模板方法模式(Template Method Pattern)[行为型] 一.引言 "结构型"的设计模式已经写完了,从今天我们开始讲"行为型"设计模式.现在我们开始讲[行为型]设计模式的第一个模式,该模式是[模板方法],英文名称是:Template Method Pattern.还是老套路,先从名字上来看看."模板方法"我第一次看到这个名称,我的理解是,有一个方法的名字叫"模板方法",后来深入学习之后,

c#设计模式系列:模板方法模式(Template Method Pattern)

引言 提到模板,大家肯定不免想到生活中的"简历模板"."论文模板"."Word中模版文件"等,在现实生活中,模板的概念就是--有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下载下来的简历模板的格式都是相同的,然而我们下载下来简历模板之后我们可以根据自己的情况填充不同的内容要完成属于自己的简历.在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来

设计模式(十八)---模板方法模式

1.简介 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑. 不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 2.模板方法结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 代表这些具体逻辑步骤的方法称做基本方法(primitive method):而将这些基本方法汇总起来的方法叫做模板方法(template metho

设计模式学习笔记(十八:模板方法模式)

1.1概述 定义了一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.这就是模板方法的定义. 类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其他若干个方法.在编写类的时候,可能需要将类的许多方法集成到一个实例方法中,即用一个实例方法封装若干个方法的调用,以表现一个算法的骨架,也就是说,调用该实例方法相当于按着一定顺序执行若干个方法. 例如,各类客运车站在安排乘客上车时都进行安全

设计模式之禅-模板方法模式

个人Blog 此篇博文所在地址:http://www.sanyinchenblog.com/?p=273 模板方法模式: 定义一个操作中的算法框架,将一些步骤延迟到子类中.使得子类可以不改变    一个算法的结构即可重定义该算法的某些特定步骤. Demo: https://github.com/sanyinchen/UMLDemo/tree/master/src/com/sanyinchen/templete https://github.com/sanyinchen/UMLDemo/tree/

Java设计模式(四) 之 模板方法模式

源码均以JDK1.8作为参考 1.定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的机构即可重定义该算法的某些特定步骤. 2.解析: 通用类图: 类图解析: 模板方法模式非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式. 2.1.抽象模板(AbstractClass) 主要定义了模板中一些基本操作(方法),它的方法分为两类: 基本方法: 基本方法也叫基本操作,是由子类实现的方法,并且被模板方法被调用. 模板方法: 可以由一个或几个,一般