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)
上一篇 2022年1月8日 下午10:00
下一篇 2022年1月8日 下午10:00


相关推荐

  • 螃蟹学PHP设计模式之中介者模式

    螃蟹学PHP设计模式之中介者模式

    2021年8月30日
    61
  • Java内存管理-掌握类加载器的核心源码和设计模式(六)

    勿在流沙筑高台,出来混迟早要还的。做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!上一篇文章介绍了类加载器分类以及类加载器的双亲委派模型,让我们能够从整体上对类加载器有一个大致的认识,本文会深入到类加载器源码分析,了解类加载器ClassLoader中核心的源码,并且分析ClassLoader中的设计思想或者设计模式! 本文地图:一、ClassLoader核…

    2022年2月28日
    37
  • JAVA设计模式之享元模式

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

    2022年3月11日
    51
  • java 流水线模式_流水线设计模式实现

    java 流水线模式_流水线设计模式实现这是关于管道实现的设计问题。以下是我的天真实施。流水线设计模式实现接口在管道的各个步骤/阶段:在流水线的步骤/阶段的publicinterfaceStep{publicUexecute(Tinput);}具体实现:publicclassStepOneimplementsStep{@OverridepublicIntegerexecute(Integerinput){r…

    2022年8月14日
    13
  • 观察者模式是非常常用的设计模式_实现一个观察者模式

    观察者模式是非常常用的设计模式_实现一个观察者模式好久没有写博客啦,之前看完了《设计模式之禅》也没有总结一下,现在回忆一下设计模式之观察者模式。1.什么是观察者模式简单情形:有A、B、C、D等四个独立的对象,其中B、C、D这三个对象想在A对象发生改

    2022年8月6日
    14
  • 设计模式之访问者(visitor)模式

    在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示。在软件开发中,有时候也需

    2021年12月28日
    42

发表回复

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

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