模板模式和Comparable类
模板模式中,父类规定好了一些算法的流程,并且空出一些步骤(方法)留给子类填充
Java的数组类中静态方法sort()就是一个模板,它空出了一个compareTo的方法,留给子类填充,用来规定什么是大于、等于和小于
package com.example.template;
public class Duck implements Comparable<Duck>{
private String name;
private int weight;
public Duck(String name, int weight){
this.name = name;
this.weight = weight;
}
public String toString(){
return "name" + name + "weight" + weight;
}
@Override
public int compareTo(Duck other) {
if(this.weight < other.weight){
return -1;
}else if(this.weight > other.weight){
return 1;
}
return 0;
}
}
package com.example.template;
import java.util.Random;
public class Employee implements Comparable<Employee> {
private String name;
private int id;
private double salary;
public Employee(String name, double salary){
this.name = name;
this.salary = salary;
Random ra = new Random();
this.id = ra.nextInt(1000000);
}
public String toString(){
return "name:" + name + " salary:" + salary + " ElyId:" + id;
}
@Override
public int compareTo(Employee other) {
if(this.id < other.id){
return -1;
}else if(this.id > other.id){
return 1;
}
return 0;
}
}
package com.example.template;
import java.util.Arrays;
public class Test {
public static void main(String[] args)
{
Duck[] ducks = new Duck[4];
ducks[0] = new Duck("Jason", 89);
ducks[1] = new Duck("Amemle", 100);
ducks[2] = new Duck("Mike", 72);
ducks[3] = new Duck("Ham", 102);
System.out.println("before sort:");
for(int i = 0 ; i < ducks.length ; i++)
System.out.println(ducks[i].toString());
Arrays.sort(ducks);
System.out.println("after sort:");
for(int i = 0 ; i < ducks.length ; i++)
System.out.println(ducks[i].toString());
Employee[] emps = {
new Employee("Jason", 999.0),
new Employee("Canson", 1599.1),
new Employee("Jack", 887.9)
};
System.out.println("--------------------");
System.out.println("before sort:");
for(int i = 0 ; i < emps.length ; i++)
System.out.println(emps[i].toString());
Arrays.sort(emps);
System.out.println("after sort:");
for(int i = 0 ; i < emps.length ; i++)
System.out.println(emps[i].toString());
}
}
结果:
before sort:
nameJasonweight89
nameAmemleweight100
nameMikeweight72
nameHamweight102
after sort:
nameMikeweight72
nameJasonweight89
nameAmemleweight100
nameHamweight102
--------------------
before sort:
name:Jason salary:999.0 ElyId:502862
name:Canson salary:1599.1 ElyId:716871
name:Jack salary:887.9 ElyId:552929
after sort:
name:Jason salary:999.0 ElyId:502862
name:Jack salary:887.9 ElyId:552929
name:Canson salary:1599.1 ElyId:716871
模板模式和Comparable类的更多相关文章
- 设计模式之——Template模板模式
Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...
- Matlab模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.本文以数据库SQL语法为例来阐述模板模 ...
- JAVA设计模式之模板模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- Java设计模式之模板模式(Template )
前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...
- Java设计模式(七) 模板模式
[模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...
- 模板模式与策略模式/template模式与strategy模式/行为型模式
模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...
- 12. 星际争霸之php设计模式--模板模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 模板模式(C++) 【转】
模板模式(template)在面向对象系统的设计和开发过程中,一定会有这样的情况:对于一些功能,在不同的对象身上展示不同的作用,但是功能的框架是一样的,这就是模板(template)模式的用武之地,我 ...
- 模板与继承之艺术——奇特的递归模板模式(CRTP)
一.什么是CRTP 奇特的模板递归模式(Curiously Recurring Template Pattern)即将派生类本身作为模板参数传递给基类. template<typename T& ...
随机推荐
- bisect模块用于插入
参考链接: chttp://www.cnblogs.com/skydesign/archive/2011/09/02/2163592.html水
- 在Mac中安装python,配置python环境
参考链接:http://blog.justbilt.com/2014/07/02/setup_python_on_mac/ 其实跟windows差不多,就是在python官网下载特定版本的python ...
- ORACLE 11G负载均衡测试
Oracle 11g R2中,引入了SCAN(Single Client Access Name)的特性.该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及S ...
- android栈和队列
android栈和队列 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表.LinkedList数据结构是一种双向的链式结构,每一 ...
- STM32F103外部晶振由8M变为12M
STM32官方提供的库文件中,HSE(外部高速时钟)默认为8MHz,最高主频为8*9=72MHz,如果将HSE变为12MHz,不修改库文件的话,最高主频则变为12*9=108MHz,最典型的问题就是U ...
- pmap命令 查看进程用了多少内存
pmap命令 查看进程用了多少内存 用法 pmap [ -x | -d ] [ -q ] pids ...
- 通过html字符串连接组合并调用javascript函数
----通过字符串连接并调用javascript函数-- var t_html = $("#Photo").html(); var n_html = "<a id= ...
- Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
python3.6.3 我在处理爬虫时候使用BeautifulSoup中遇到报错 “ bs4.FeatureNotFound: Couldn't find a tree builder with t ...
- zabbix 在linux上安装以及一些配置
本文章将演示zabbix 3.2版本的安装,供有需要的伙伴们参考: 网络也有很多关于zabbix的安装文档,甚至每一步的配置都有详细的截图,我这里就不演示截图了,多配置几次自然就熟练了.多折腾. 楼主 ...
- Linux学习笔记 -- 目录与文件的管理
目录结构 Linux的目录结构为树状结构,最顶级的目录为根目录 “/”. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是. 绝对路径与相对路径 绝 ...