`
hm4123660
  • 浏览: 282887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:70118
社区版块
存档分类
最新评论

模板方法设计模式

阅读更多

        模式是一个解决方案,一个模式解决了一类特定的问题,当我们再次遇到同样的问题时,我们仍然可以使用它解决同样的问题,这里介绍使用模板方法设计模式。

       在开发中我们时常可以使用模板方法设计模式,这里我们就以简单的上班为例。上班一族每个工作日去上班都要经过  洗漱---上班方式(交通工具)--开始工作   三个步骤,我们写一个程序来模拟这个过程

public class Work {
	
	public void doWork()
	{
		//洗漱过程
		System.out.println("洗漱。。。。。。");
		
		//去公司过程
		System.out.println("上班方式:地铁。。。。。。");
		
		//工作过程
		System.out.println("开始工作。。。。。。");
	}

}

    然后有些人上班是走路,骑自行车,公交等等方式去上班,但不论选择何种交替工具,都得先洗漱,最后工作。当需要公交上班时,很容易想到由于只是交通工具不同,我们可以把Work类快速复制一份,只需要把

公交换成公交,如:

public void doWork()
	{
		//洗漱过程
		System.out.println("洗漱。。。。。。");
		
		//去公司过程
		System.out.println("上班方式:公交。。。。。。");
		
		//工作过程
		System.out.println("开始工作。。。。。。");
	}

 

    复制黏贴看起来很实用,但是这些类会变得难以维护,如果公共部分洗漱需要更改,这需要把类一个个进行更改,所以我们需要好好思考复制黏贴真的好用吗?

    我们都知道软件开发,变化时永恒的,软件维护始终贯穿软件开发整个过程。为了提高软件的维性,我们在软件开发中应该遵守DRY这一重要原则。

    DRY(Don‘t Repeat Yourself)不要复制自己,为了使软件更加健壮,易于阅读和维护,应遵守该原则,不要编写重复的代码,给维护代理麻烦。

    上面的情形,我们可以使用模板方法设计模式来解决。

 

1.构建Work抽象父类

public abstract class Work {
	//定义final,不被子类重写
	public final void clean()
	{
		//洗漱过程
		System.out.println("洗漱。。。。。。");
	}
	//去上班方式	
	public abstract void goCompany();
	
	public final void work()
	{
		//工作过程
		System.out.println("开始工作。。。。。。");
	}

}

 

2.子类继承抽象父类,实现自己的上班方式

public class Subway extends Work{

	@Override
	public void goCompany() {
		//去公司过程
		System.out.println("上班方式:地铁。。。。。。");
		
	}

}

 

   使用模板方法设计模式能够解决代码冗余,易于扩展。

 

  模板方法设计模式应用很广泛,但是过分的使用模板设计模式往往会导致类爆炸(子类泛滥)。如查询数据库数据并对查询结果进行处理。整个过程可以分为三步

1.创建数据库连接对象

2.创建Statement实例执行查询操作

3.处理查询结果

     发现整个过程中1,2步是相同的,不同的主要是对查询结果进行操作上。这里使用模板方法设计模式你会发现,由于查询的种类很多,导致需要创建很多子类来处理查询结果,会导致子类泛滥。为了解决这一问题,需要结合接口回调来处理,使用java的匿名内部类来完成查询结果的处理。

 

1.定义父类

package com.longpo.template;

public class Work {
	
	public final void Connect()
	{
		System.out.println("连接数据库。。。。。。");
	}

	public void statement()
	{
		System.out.println("Statement实例。。。。。。");
		
	}
	
	public void handler(CallBack callBack){
		this.Connect();
		this.statement();
		callBack.HanderResult("处理查询结果。。。。。。");
	}
	
	//回调接口
	public interface CallBack {  
        
        public void HanderResult(String result);  
    }  

}

 

2.测试

public class Person extends Work{

	public static void main(String[] args) {
		
		Person person =new Person();
		
		person.handler(new CallBack() {
			
			@Override
			public void HanderResult(String result) {
				
				System.out.println(result);
				
			}
		});
	}
}

 

运行结果:



 

  • 大小: 7.4 KB
6
3
分享到:
评论

相关推荐

    模板方法设计模式1

    模板方法设计模式是一种在面向对象设计中非常常用的设计模式,它的主要目的是为了封装算法或操作流程的固定部分,同时允许子类对其中某些特定步骤进行定制。这种模式遵循开闭原则,即对扩展开放,对修改关闭,允许...

    第05章 面向对象(下) 10 抽象类应用之模板方法设计模式

    面向对象编程是软件开发中的核心思想之一,而模板方法设计模式是这种思想在实践中的一种具体应用。本章我们将深入探讨“模板方法设计模式”,并结合Java语言进行详细讲解。 模板方法设计模式是一种行为设计模式,它...

    Java模板方法设计模式[定义].pdf

    Java 模板方法设计模式定义 Java 模板方法设计模式是指在软件开发过程中,通过定义一个通用的算法结构,然后将具体的实现细节交给子类来完成的设计模式。该模式的核心思想是,通过回调函数来实现算法的可扩展性和...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    设计模式之模板方法模式

    设计模式之模板方法模式,这份文档以例子的形式介绍了模板方法模式

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    设计模式的模板方法模式的例子

    模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...

    设计模式之模板方法(Template)

    模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式的主要目的是定义一个操作的框架,允许子类在不改变整体结构的情况下重定义具体步骤。这有助于保持代码的整洁,实现代码复用,并...

    设计模式之模板方法测试代码

    模板方法设计模式是行为设计模式的一种,它定义了算法的骨架,允许在子类中定义算法的某些步骤。在这个场景下,"设计模式之模板方法测试代码"指的是一个用于验证模板方法模式实现的C++代码示例。 模板方法模式的...

    设计模式教程-模版方法

    模板方法设计模式是一种在面向对象设计中常用的行为型设计模式,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类在不改变算法整体结构的情况下,重定义某些特定步骤。 在软件开发中,模板...

    模板方法设计

    模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色,尤其是在代码复用和保持结构一致性方面。这种模式定义了操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个...

    C++设计模式课件3_Template Method_模板方法.pdf

    ### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    深入浅出设计模式之模板方法模式

    ### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...

    js如何实现设计模式中的模板方法

    模板方法设计模式是一种行为设计模式,它允许我们在父类中定义一个算法的骨架,而将一些步骤延迟到子类中。这种模式使得子类可以在不改变算法结构的情况下,重写特定的步骤。 在JavaScript中实现模板方法,主要利用...

    设计模式模方法模式PPT学习教案.pptx

    《模板方法设计模式详解》 模板方法设计模式是面向对象设计模式中的一种行为模式,它允许在父类中定义一个算法的框架,而将一些步骤的实现延迟到子类中。这种模式通常用于代码复用,特别是在有多个相似类,但它们在...

    设计模式(十一)之模板方法模式.zip

    模板方法模式是面向对象设计中的一种行为设计模式,它在软件工程中扮演着重要的角色,尤其是在需要维护代码的可扩展性和可复用性时。这个模式的核心思想是封装不变的部分,将可变部分抽象出来,让子类进行扩展。通过...

    策略模式结合模板方法模式

    策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...

Global site tag (gtag.js) - Google Analytics