`
wuhongyu
  • 浏览: 406918 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA设计模式学习笔记5——模版方法模式(Template Method Pattern)

阅读更多

模版方法模式(Template Method Pattern)——定义一个操作中算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

 

    模版方法模式适用于一组固定流程的算法,在抽象类中定义一组算法,由子类去实现,抽象类提供一个公开方法,确定调用这组算法的步骤。

 

    比如,我们去营业厅办理一张手机卡,不论是移动、联通还是电信,流程都是先办卡、再选号,而办卡和选号的动作每个运营商自己去实现。

    我们定义一个运营商的抽象类,有两个抽象的方法办卡和选号,还有一个方法就是提供服务,调用办卡和选号:

 

public abstract class ServiceOperator {
	protected abstract void requestCard();
	protected abstract void selectNumber();
	
	final public void service(){
		this.requestCard();//先办卡
		this.selectNumber();//再选号
	}
}

     分别定义两个实现类,移动和联通:

 

 

public class ChinaMobile extends ServiceOperator {
	@Override
	protected void requestCard() {
		System.out.println("办一张中国移动电话卡");
	}
	@Override
	protected void selectNumber() {
		System.out.println("选一个中国移动电话号");
	}
}

 

public class ChinaUnicom extends ServiceOperator {
	@Override
	protected void requestCard() {
		System.out.println("办一张中国联通电话卡");
	}
	@Override
	protected void selectNumber() {
		System.out.println("选一个中国联通电话号");
	}
}

     这样,不论哪个运营商要修改办卡或是选号的操作时,对我们的整个流程不会产生任何影响了。对于办卡和选号这两个动作,称之为基本方法,由具体的实现类去完成;提供服务的方法称之为模版方法,定义了基本方法的调用流程。

 

 

测试类:

 

public class Test {
	/**
	 * 模版方法模式(Template Method Pattern)——定义一个操作中算法的框架,而将一些步骤延迟到子类中。
	 * 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		ServiceOperator serviceOperator = new ChinaUnicom();
		serviceOperator.service();
	}
}

 

 

    模版方法模式还可以进一步进行扩展。对于某些基本方法的调用与否,可能需要一些条件,这时,我们可以在模版抽象类中定义一个控制这些条件的方法,称之为钩子方法(Hood Method),由子类去设定这个条件,以使不同的实现类能够做出不同的处理。

    比如,手机卡丢了,要去营业厅补一张,移动说,丢了没办法,重办卡、重选号吧,联通为了抢客户,就说,办张卡,号还用原来那个,不用选了。为了实现这个逻辑,我们在运营商的抽象类中增加一个判断是否为新用户的方法,如果是新用户,就不调用选号的方法了:

public abstract class ServiceOperator {
	protected abstract void requestCard();//基本方法
	protected abstract void selectNumber();//基本方法
	
	//模版方法
	final public void service(){
		this.requestCard();//先办卡
		if(this.isNewCustomer()){
			this.selectNumber();//再选号
		}
	}
	
	//钩子方法(Hood Method)
	protected boolean isNewCustomer(){
		return true;
	}
}

    移动不管他是新用户还是老用户,全当新用户处理:

public class ChinaMobile extends ServiceOperator {
	@Override
	protected void requestCard() {
		System.out.println("办一张中国移动电话卡");
	}
	@Override
	protected void selectNumber() {
		System.out.println("选一个中国移动电话号");
	}
	@Override
	protected boolean isNewCustomer() {
		return true;
	}
}

    联通让用户自己决定,老用户就可以不选号,光办卡:

public class ChinaUnicom extends ServiceOperator {
	private boolean isNewCustomer = true;
	@Override
	protected void requestCard() {
		System.out.println("办一张中国联通电话卡");
	}
	@Override
	protected void selectNumber() {
		System.out.println("选一个中国联通电话号");
	}
	@Override
	protected boolean isNewCustomer() {
		return this.isNewCustomer;
	}
	public void setNewCustomer(boolean isNewCustomer) {
		this.isNewCustomer = isNewCustomer;
	}
}

测试类:

public class Test {
	/**
	 * 模版方法模式(Template Method Pattern)——定义一个操作中算法的框架,而将一些步骤延迟到子类中。
	 * 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		ChinaUnicom chinaUnicom = new ChinaUnicom();
		chinaUnicom.setNewCustomer(false);
		chinaUnicom.service();
	}
}

 

 

 

 

1
0
分享到:
评论
2 楼 di1984HIT 2015-02-06  
我很喜欢你对设计模式的理解。
1 楼 杀手请杀人 2014-03-06  
说明的很清楚 很喜欢

相关推荐

    JAVA学习笔记————————

    在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    Java设计模式学习笔记

    ### Java设计模式学习笔记 #### 1. 设计模式的七大原则 ##### 1.1 设计模式的目的 设计模式是一种解决特定问题的通用解决方案,它可以帮助开发人员编写出更高质量、更容易维护和扩展的代码。设计模式的目标在于...

    Java设计模式学习笔记.pdf

    首先,学习方法要正确。理解模式的意图,即它的目的是什么,它解决了什么问题,以及它在什么时候使用是学习设计模式的基础。同时,要掌握模式解决问题的方式以及其结构和关键代码。此外,通过生活和软件开发中的应用...

    狂神Java学习笔记————前端入门——html、css、JavaScript学习代码

    【狂神Java学习笔记——前端入门——HTML、CSS、JavaScript学习代码】是针对初学者的一份详实的学习资料,这份笔记记录了跟随B站知名up主“遇见狂神说”的java系列视频中关于前端开发的基础内容。笔记内容不仅与视频...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    良葛格————JavaJDK5.0学习笔记PDF

    良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    图解java设计模式_学习笔记_java开发

    这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...

    300Java设计模式部分学习笔记

    8. 模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 9. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。 10. 观察者模式...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    Java JDK 6学习笔记——ppt简体版.rar

    这份"Java JDK 6学习笔记——ppt简体版"提供了关于这个关键版本的详细教程,适合初学者和有一定经验的开发者来深入理解Java编程。 首先,我们要了解Java JDK是什么。Java Development Kit,简称JDK,是Oracle公司...

    韩顺平_Java设计模式笔记.docx

    本资源摘要信息是对《韩顺平_Java设计模式笔记.docx》的总结和分析,该笔记涵盖了 Java 设计模式的基础知识、设计模式的七大原则、原型设计模式、解释器设计模式、单例设计模式等内容,并对每个设计模式的原理、实现...

    java设计模式学习笔记,以及各种模式的代码实现

    5. **工厂方法模式**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化推迟到子类。 6. **原型模式**:通过复制现有的对象来创建新对象,而不是通过实例化新类。在Java中,我们可以...

    Java JDK 6学习笔记——ppt

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...

    Java JDK 6学习笔记——ppt简体版附课本代码

    这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...

    Java设计模式学习.pdf

    文档中描述的是Java设计模式学习笔记,目前涉及了7种设计模式,但没有具体指明这7种模式是什么,计划后续增加更多的模式。虽然文件内容中存在OCR扫描的识别错误,但不影响我们从整体上把握设计模式的脉络和学习方法...

Global site tag (gtag.js) - Google Analytics