Android 设计模式Template Method模式

Android 设计模式Template Method模式

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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

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

第一步:都是要用沸水

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

第三步:把饮料倒进杯子

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

在上面的步骤中一、三是一样的,能够抽取出来放在基类中,二、四不一样,能够抽象出来,让子类去实现,下面是饮料抽象的父类,父类能够让未知的子类去做它本身可能完毕的不好或者根本完毕不了的事情。能够加一个钩子函数: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、模板方法使用继承来改变算法的一部分。策略模式使用托付来改变整个算法。

相关代码:http://download.csdn.net/detail/deng0zhaotai/7835511

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117227.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 六、策略模式—旅行的交通工具 #和设计模式一起旅行#[通俗易懂]

    兵无常势,水无常形,能因敌变化而取胜者,谓之神! ——《孙子兵法》故事背景旅行开始,我和设计模式mm要去的目的地很多,去往不同目的地可以选择的交通工具也是多样的,从北京到上海,我们可以选择自驾游、乘坐飞机、高铁,甚至是骑单车等等方式!每一种交通工具到达目的的时间也不同,假如从北京到上海,乘坐飞机两个小时,高铁五个小时,自驾游3天(3*24小时),每一种交通费也不一样!假…

    2022年2月27日
    49
  • 设计模式(一)工厂模式Factory(创建类型)

    设计模式(一)工厂模式Factory(创建类型)

    2021年12月31日
    55
  • ❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!❤️

    ❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!金九银十已经来了,挺近大厂最好的机会已经来了!如果你是要找工作的,一定要抓住这个机会!前面已经整理了很多的面试资料:1,❤️爆肝!整理了一周的Spring面试大全【含答案】,吊打Java面试官【建议收藏】!❤️2,❤️肝完了,一天掌握数据结构和算法面试题,吊打面试官,建议收藏❤️3,❤️集合很简单?开什么玩笑?肝了一周,全是精华,万字讲解!面试再不怕集合问题了!!!❤️4,肝完了,总结了SpringBoot与缓存的知识点,快速掌

    2022年6月10日
    26
  • [设计模式]委派模式「建议收藏」

    github地址:https://github.com/1711680493点我进入github如需了解更多设计模式,请进入我的设计模式专栏委派模式委派模式不是23设计模式中的一种.与策略模式很相似.拥有以下三种角色抽象任务角色 委派者角色 具体任务角色委派模式,就是将任务发给委派者角色,委派者角色去委派具体任务角色委派模式对外隐藏了具体实现,仅将委派者角色暴露给外部委派模式和策略模式不同的是,委派者角色和具体任务角色都要继承/实现抽象任务角色Spring框架很

    2022年4月16日
    43
  • JAVA设计模式之享元模式

    解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。  在Flyweight模式中,由于要产生各种各样

    2022年3月11日
    50
  • 23种设计模式对应应用场景

    23种设计模式对应应用场景

    2021年10月2日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号