模板模式中,父类规定好了一些算法的流程,并且空出一些步骤(方法)留给子类填充

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类的更多相关文章

  1. 设计模式之——Template模板模式

    Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...

  2. Matlab模板模式

    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.本文以数据库SQL语法为例来阐述模板模 ...

  3. JAVA设计模式之模板模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  4. Java设计模式之模板模式(Template )

    前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...

  5. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  6. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  7. 12. 星际争霸之php设计模式--模板模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. 模板模式(C++) 【转】

    模板模式(template)在面向对象系统的设计和开发过程中,一定会有这样的情况:对于一些功能,在不同的对象身上展示不同的作用,但是功能的框架是一样的,这就是模板(template)模式的用武之地,我 ...

  9. 模板与继承之艺术——奇特的递归模板模式(CRTP)

    一.什么是CRTP 奇特的模板递归模式(Curiously Recurring Template Pattern)即将派生类本身作为模板参数传递给基类. template<typename T& ...

随机推荐

  1. PS抠图之单色背景图片

    PS一直大家比较喜欢的一款图像处理软件,很多朋友对使用基本的功能.最近很多的朋友都在问我关于PS抠图的方法,这些方法也不是一句两句就能说清楚,并且每天都重复的叫他们,不如直接写出来刚刚接触到的朋友一起 ...

  2. bzoj 4806 炮

    Written with StackEdit. Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮 ...

  3. 帮你彻底解决eclipse(myeclipse)中写struts.xml配置文件

    其实,在自己写struts.xml的时候,竟然没有代码提示功能.让我非常的烦恼,其实解决这个问题的关键还是system不知道他的dtd的规则无法提示配置信息 很简单,那就让它知道就OK了!!! 道理明 ...

  4. 【mssql】SQL Server2012编程入门经典(第四版)(上) 读书笔记

    数据库用了很久了,但好多东西很容易忘记,这次头脑发热想起来读一遍书,做点笔记! 从第五章开始参考:<SQL Server 2005 编程入门经典>学习笔记 一.RDBMS基础:SQL Se ...

  5. python操作rabbitmq操作数据(不错)

    ##一.RabbitMQ 消息队列介绍 RabbitMQ也是消息队列,那RabbitMQ和之前python的Queue有什么区别么? py 消息队列: 线程 queue(同一进程下线程之间进行交互) ...

  6. Pycharm简单使用教程

    转自https://blog.csdn.net/qq_40130759/article/details/79421242 1.下载pycharm pycharm是一种Python IDE,能够帮助我们 ...

  7. 关于Spring框架你解多少?

    类似于谈谈你对Spring的了解的题目,在很多面试中都会被提到的. Spring,英文意思是春天的意思.在java的世界里,Spring是一个现时非常流行的开源应用框架. Spring 框架是一个分层 ...

  8. ②HttpURLConnection通过Json参数方式提交Post请求

    之前的文章介绍过通过报文的方式HttpURLConnection提交post请求,今天介绍下通过Json参数的方法提交Post请求,先上代码 public static HttpResponse se ...

  9. datasnap 上传/下载大文件(本Demo以图传片文件为例)

    好久没写技术文了 datasnap传大流. 完整代码,同时感谢叶兄传流的指点,(只公开十天) 附:下面代码,转载请注明出处 ::code 服务端: function TServerMethods1.D ...

  10. nginx虚拟主机的配置

    nginx虚拟主机的配置 server { listen ; server_name 127.0.0.1; access_log off; root /var/www/html/; location ...