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

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. 使用wlan接收器经常重新登录怎么办

    wlan接收器是一个大功率的网卡,能够接受耿远距离的无线网络,在农村和乡镇很普及,很多家庭里都是用这个装置来接受远距离的CMCC信号.但是在使用的时候会经常出现一些问题,例如我们登陆以后,还没等上网就 ...

  2. BZOJ4832: [Lydsy2017年4月月赛]抵制克苏恩

    传送门 题目大意: 攻击k次,每次可攻击随从或英雄. 随从数不大于7个,且1滴血的a个,2滴b个,3滴c个. 攻击一次血-1,如果随从没死可以生成3滴血随从一个 题解: 概率/期望dp f[i][j] ...

  3. git身份验证失败清除密码缓存

    git config --system --unset credential.helper

  4. FastAdmin Bootstrap-Table 分页列表 pageList 如何设置?

    FastAdmin Bootstrap-Table 分页列表 pageList 如何设置? FastAdmin 的 表格使用的是 Bootstrap-Table 组件,这个组件该有的功能他都有. 默认 ...

  5. 为什么 FastAdmin 的插件不全部免费?

    为什么 FastAdmin 的插件不全部免费? 主要还是有以下几个原因. 支持开发者. 为了支付网站空间费和 CDN 费. 有收入后可以更好的开发 FastAdmin.

  6. 关于yum

    1. yum的本地安装 yum install --downloadonly --downloaddir=/opt/software cd /opt/software yum localinstall ...

  7. (转)Android 使用com.j256.ormlite

    在web开发中经常采用的hibernate,在android也提供了一个ormlite 导入所需jar包后 摘自:http://blog.csdn.net/cuiran/article/details ...

  8. 如何让公司从SVN改到Git?

    把公司的SVN迁移到GitLab CE(GitLab社区版)原因主要有下面几个: 年青的新人进来,喜欢用git的越来越多 GitLab CE提供了优美的 web 界面,图形化分支结构,更直观的代码审查 ...

  9. 如何在已经安装好的Nginx上增加新模块

    学习资源: https://blog.csdn.net/dxm2025/article/details/41149865 https://blog.csdn.net/qq_36663951/artic ...

  10. Linux安装JRE tomcat配置java环境

    安装JRE 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JRE软件. 1.wget http://down ...