android method 模板,Android 设计模式Template Method模式

自定义模板方法模式:定义的算法的骨架中的方法,虽然某些步骤推迟到子类中,下模板方法允许子类不能改变在的情况下,该算法的结构。算法重新定义某些步骤。

设计原则:不要给我们打电话。我会打电话给你。(像猎头与求职者,求职者并不需要招聘,搜索会发现,你只需要工作)坞原则

引用一个样例,一个店中有两饮料:咖啡和茶。他们的冲泡方法

第一步:都是要用沸水

第二步:用热水泡咖啡或茶

第三步:把饮料倒进杯子

第四步:在饮料中增加适当的调料

在上面的步骤中一、三是一样的,能够抽取出来放在基类中,二、四不一样,能够抽象出来,让子类去实现,下面是饮料抽象的父类,父类能够让未知的子类去做它本身可能完毕的不好或者根本完毕不了的事情。能够加一个钩子函数:custcomerWantsCondiments(),请子类去重写。

CoffeineBeverageWithHook.java

package com.dzt.template;

/**

* 因为有的客户有可能不须要调料,这时就须要让客户去选择是否来加入调料,须要

*

* @author Administrator

*

*/

public abstract class CoffeineBeverageWithHook {

void prepareRecipe() {

boilWater();

brew();

pourInCup();

if (custcomerWantsCondiments())

addCondiments();

}

abstract void brew(); // 冲泡

abstract void addCondiments(); // 加入调料

// 烧开水

void boilWater() {

System.out

.println("CoffeineBeverageWithHook-------------------->boilWater");

}

// 把饮料倒进杯子

void pourInCup() {

System.out

.println("CoffeineBeverageWithHook-------------------->pourInCup");

}

/**

* 子类能够重载这个函数

*

* @return

*/

boolean custcomerWantsCondiments() {

return true;

}

}

下面是咖啡类。继承了上面的饮料父类

CoffeineWithHook.java

package com.dzt.template;

public class CoffeineWithHook extends CoffeineBeverageWithHook {

@Override

void brew() {

// TODO Auto-generated method stub

System.out.println("CoffeineWithHook-------------------->brew");

}

@Override

void addCondiments() {

// TODO Auto-generated method stub

System.out

.println("CoffeineWithHook-------------------->addCondiments");

}

@Override

boolean custcomerWantsCondiments() {

// TODO Auto-generated method stub

return false;

}

}

下面是茶类,继承了上面的饮料父类

TeaWithHook.java

package com.dzt.template;

public class TeaWithHook extends CoffeineBeverageWithHook {

@Override

void brew() {

// TODO Auto-generated method stub

System.out.println("TeaWithHook-------------------->brew");

}

@Override

void addCondiments() {

// TODO Auto-generated method stub

System.out.println("TeaWithHook-------------------->addCondiments");

}

@Override

boolean custcomerWantsCondiments() {

// TODO Auto-generated method stub

return true;

}

}

以上代码能够去改动custcomerWantsCondiments()函数,由用户决定是否须要加入调料

測试代码

package com.dzt.template;

/**

* 模板方法模式 在模板方法中加入钩子方法。让用户决定

*

* @author Administrator

* @date 2014.08.20

*/

public class TemplateMain {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

CoffeineWithHook coffHook = new CoffeineWithHook();

TeaWithHook teaHook = new TeaWithHook();

coffHook.prepareRecipe();

System.out

.println("---------------------------------------------------------------");

teaHook.prepareRecipe();

}

}

总结:

1、模板方法是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。

2、模板方法导致一种方向控制结构,"好莱坞法则":"Don't call me,i will call you.",即一个父类调用子类的操作。而不是相反。

3、模板调用操作的类型有详细的操作,详细的AbstracClass操作,原语操作。工厂方法,钩子操作。少定义原语操作。

4、模板方法使用继承来改变算法的一部分。策略模式使用托付来改变整个算法。

参考书:《Head First 设计模式》

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值