设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解

模板方法模式(template method pattern) 排序(sort) 详解

本文地址: http://blog.csdn.net/caroline_wendy

参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455

模板方法模式的一个主要的应用是排序(sort)算法.

对象的排列方式并不是完全相同, 所以需要排序(sort)算法compareTo()可以按需要定制, 但排序方法的结构不变.

需要实现(implement)接口Comparable, 并实现接口的方法public int compareTo(Object object), 才可以使用Arrays.sort()进行排序.

具体方法:

1. 待排序的对象, 实现Comparable接口的compareTo()方法.

/**
 * @time 2014年6月20日
 */
package template_method.sort;

/**
 * @author C.L.Wang
 *
 */
public class Duck implements Comparable {

	String name;
	int weight;

	/**
	 *
	 */
	public Duck(String name, int weight) {
		// TODO Auto-generated constructor stub
		this.name = name;
		this.weight = weight;
	}

	public String toString() {
		return name + " weighs " + weight;
	}

	public int compareTo(Object object) {
		Duck otherDuck = (Duck)object;

		if (this.weight < otherDuck.weight) {
			return -1;
		} else if (this.weight == otherDuck.weight) {
			return 0;
		} else {
			return 1;
		}
	}

}

2. 创建待排序对象的数组, 将数组放入Arrays.sort()函数, 进行排序, 输出即可.

/**
 * @time 2014年6月20日
 */
package template_method.sort;

import java.util.Arrays;

/**
 * @author C.L.Wang
 *
 */
public class DuckSortTestDrive {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Duck[] ducks = {
				new Duck("Daffy", 8),
				new Duck("Dewey", 2),
				new Duck("Howard", 7),
				new Duck("Louie", 2),
				new Duck("Donald", 10),
				new Duck("Huey", 2)
		};

		System.out.println("Before sorting: ");
		display(ducks);

		Arrays.sort(ducks);

		System.out.println("\nAffter sorting: ");
		display(ducks);
	}

	public static void display(Duck[] ducks) {
		for (int i=0; i<ducks.length; i++) {
			System.out.println(ducks[i]);
		}
	}

}

3. 输出:

Before sorting:
Daffy weighs 8
Dewey weighs 2
Howard weighs 7
Louie weighs 2
Donald weighs 10
Huey weighs 2

Affter sorting:
Dewey weighs 2
Louie weighs 2
Huey weighs 2
Howard weighs 7
Daffy weighs 8
Donald weighs 10

设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解

时间: 2024-10-05 03:41:42

设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解的相关文章

设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

模板方法模式(template method pattern) 排序(sort) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式的一个基本的应用是排序(sort)算法. 对象的排列方式并非全然同样, 所以须要排序(sort)算法compareTo(

设计模式 - 模板方法模式(template method pattern) JFrame 详解

模板方法模式(template method pattern) JFrame 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), Java的JFrame使用模板方法模式, paint()是可以覆盖的方法,

设计模式 - 模板方法模式(template method pattern) Applet 详解

模板方法模式(template method pattern) Applet 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), applet就是一个能够在网页上面执行的小程序, applet有很多钩子(

设计模式 - 模板方法模式(template method pattern) 详解

模板方法模式(template method pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 模板方法模式(template method pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤. 模板方法可以进行挂钩(hook), 钩子(hook)是一种被声明在抽象类中的方法, 但只有空的或者默认的实现. 钩子的存在, 可以让子类有能力

设计模式 - 模板方法模式(template method pattern) JFrame 具体解释

模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), Java的JFrame使用模板方法模式, paint()是能够覆盖的方

设计模式 - 模板方法模式(template method pattern) Applet 具体解释

模板方法模式(template method pattern) Applet 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), applet就是一个可以在网页上面运行的小程序, applet有非常多

设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习&quot;模板方法模式&quot;(Template Method Pattern)

今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知,醋溜土豆丝,好吃不上火.清炒苦瓜这道菜好啊,更是夏天必备之良菜,其功效在此就不做过多赘述了.言归正传,上篇博客我们从“小弟”中学习了“外观模式”,我们也把“外观模式”戏称为“小弟模式”.今天我们要从醋溜土豆丝和清炒苦瓜的制作过程中来学习一下我们今天博客的主题“模板方法模式”(Template Me

设计模式(行为型)之模板方法模式(Template Method Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之命令模式(Command Pattern)>http://blog.csdn.net/yanbober/article/details/45500113 概述 模板方法模式是一种基于继承的代码复用,它是一种类行为型模式:是结构最简单的行为型设计模式,在其结构

[设计模式]&lt;10&gt;. C++与模板方法模式(template method pattern)

作者:默默的EEer 原文地址:http://www.cnblogs.com/hebaichuanyeah/p/6092152.html 曾经在Qt中写过这样个需求,需要在程序所有的界面中添加一个自定义的事件.该事件由一个线程触发. 在每一个界面对象里面都单独添加一个事件绑定,确实是麻烦. 于是,我写了一个事件的父类接口,在事件中把该线程和一个事件过滤器函数绑定,同时在事件过滤器判断是否触发事件,然后调用一个事件响应函数,该事件响应函数是一个纯虚函数,实际上在子类中实现.并在把界面类继承自这个父