首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一天一个设计模式-Template

Template 模式

Template 字面上的含义就是模板的意思,比如朋友们喜欢的神秘花园。

只要用不同颜色的笔就能涂出美丽的效果,如果我们用纯色的笔来涂,那么它就是纯色的;如果我们用彩色的笔来涂,那么它就是五颜六色的。但是无论我们用什么笔来涂,它都是模板给的样子,就像上边那只孔雀,不管是什么颜色的孔雀,都是一只孔雀。

简单来说,Template 模式就是在父类中定义处理流程框架,在子类中实现具体处理的模式。我们用一个简单的栗子来说明。我们现在要打印字符或者字符串如果是字符的话就让它循环打印10遍(不换行)并在前后加上“”,例如如果是字符串的话,就让它循环打印10遍(换行)并在首尾行加上与字符串等长的“+”,例如

+++++++++++

Hello,world

Hello,world

Hello,world

...

Hello,world

+++++++++++DisplayTemplate首先我们定义一个模板,也就是一个抽象类 DisplayTemplate,这里面有一系列抽象方法:、、,和一个模板方法负责把这一系列抽象方法组成一个工作模板。

/**

* 抽象类 DisplayTemplate

*/

publicabstractclassDisplayTemplate{

publicabstractvoidprint();

publicabstractvoidbegin();

publicabstractvoidend();

// 调用抽象方法组成模板

publicfinalvoiddisplay() {

begin();

for(inti=;i

print();

}

end();

}

}DisplayChar然后我们来实现模板中定义的抽象方法,展示一个字符。

/**

* 实现模板中的抽象方法,展示字符

*/

publicclassDisplayCharextendsDisplayTemplate{

privatecharch;

publicDisplayChar(charch) {

this.ch=ch;

}

@Override

publicvoidprint() {

System.out.print(ch);

}

@Override

publicvoidbegin() {

System.out.print("

}

@Override

publicvoidend() {

System.out.println(">");

}

}DisplayString接着实现展示字符串。

/**

* 具体实现模板中的抽象方法,展示字符串

*/

publicclassDisplayStringextendsDisplayTemplate{

privateStringstr;

publicDisplayString(Stringstr) {

this.str=str;

}

privatevoidprintLine() {

for(inti=;i

System.out.print("+");

}

System.out.println();

}

@Override

publicvoidprint() {

System.out.println(str);

}

@Override

publicvoidbegin() {

printLine();

}

@Override

publicvoidend() {

printLine();

}

}至此,我们就实现了不同方式展示字符和字符串,但又同样遵循同一种展示框架。代码地址:https://github.com/MrNullPoint/TemplateExp

解惑

逻辑处理通用化很多时候,我们的业务逻辑是可以抽象出来的,如果我们在父类中定义好了程序逻辑或者实现完了算法,在子类中就不用考虑程序逻辑和算法一类的问题,如果逻辑或者算法出现了 Bug,我们只需要找到父类修改模板方法即可。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180218G0OR1E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券