package com.learn.stratege;/*** 如果DataSorter对于float类型进行排序,你该怎么办* 有人的人说很简单,再加一个sort方法,重载里面用来排序float,* 如果要加一个double用来排序的方法,老实说这个更容易,直接sort(),参数里面数组是double类型* double类型也能确定谁大谁小,所以这个方法也能去排序double类型,* 下面我要说难的了* * 请问下面有两只猫,我想让DataSort对猫进行排序,这个时候你该怎么办,* 有人说那还不简单,* @author Leon.Sun**/
public class DataSorter {/*** Cat是Cat类型的数组* 问题是其他算法我不看,我不管,问题是我怎么判断两只猫谁大谁小呢* 怎么来判断两只猫到底谁大谁小呢* 有人说我们可以通过cat.get猫的属性* @param a*/public static void sort(Cat[] a) {for(int i=0;i<a.length;i++) {for(int j=0;j<j-i-1;j++) {/*** 如果对这只猫的高度大于j+1这只猫的高度,那么就是j这只猫比j+1这只猫更大* 当然这里面要有一个swap*/if(a[j].getHeight()>a[j+1].getHeight()) {swap(a,j,j+1);}}}}/*** 最好是新建一个swap* 只不过我们要把int类型改成Cat类型* 这样这只猫就可以排序了* 我们拿到这只猫的高度,让他来和另外一只猫的高度来比* 只要高度高于另外一只猫我就认为我这只猫比另外一只猫大,这样我就又能排序了,* @param a* @param j* @param y*/private static void swap(Cat[] a, int x, int y) {Cat temp = a[x];a[x] = a[y];a[y] = temp;}/*** 这个方法只要判断谁大谁小,只要有这个标准,* 这个方法就能帮你排序* @param a*/public static void sort(int[] a) {for(int i=0;i<a.length;i--) {for(int j=0;j<i-1;j++) {if(a[j]>a[j+1]) {swap(a,j,j+1);}}}}private static void swap(int[] a, int x, int y) {int temp = a[x];a[x] = a[y];a[y] = temp;}public static void p(int[] a) {for(int i=0;i<a.length;i++) {System.out.print(a[i] + " ");}System.out.println();}/*** 定义一个可以输出Cat类型的方法* @param a*/public void p(Cat[] a) {for(int i=0;i<a.length;i++) {System.out.print(a[i] + " ");}System.out.println();}}
package com.learn.stratege;/*** 作为猫来说他可能有他自己的属性* * 我直接写,需要Cat的一个构造方法* @author Leon.Sun**/
public class Cat {/*** 由于它是private,别人要访问就得通过get/set给我们设定一下*/private int height;private int weight;public Cat() {super();// TODO Auto-generated constructor stub}/*** 在构造方法里我可以指定高度和体重* @param height* @param weight*/public Cat(int height, int weight) {super();this.height = height;this.weight = weight;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}/*** 表示我这个方法是重写的,如果你不理解,就简单这么理解,当我需要打印一只猫的时候,* 会调用猫的toString方法,*/@Overridepublic String toString() {return "Cat [height=" + height + ", weight=" + weight + "]";}}
package com.learn.stratege;/*** 验证一下* @author Leon.Sun**/
public class Test {public static void main(String[] args) {DataSorter dataSorter = new DataSorter();   /*** 我就写三只猫* 现在他能排好顺序了* 现在p这个方法只能输出int类型*/Cat[] a = {new Cat(8,8),new Cat(2,2),new Cat(1,1)};dataSorter.sort(a);/*** 当我们运行这个程序的时候,其实是调用类的hashCode方法,* Object的两个方法,一个是toString,一个是equals,* 我们想要Cat正常的输出,给他加一个toString方法*/dataSorter.p(a);}
}

设计模式之_Strategy_03相关推荐

  1. 【Design pattern】设计模式思路总结(一)

    看了一周的设计模式,跟着小菜的思路走! 从简单工厂过渡策略,后面看的这几个模式都是在单一职责,开放--封闭原则,依赖倒转原则下不断的改进,采用模式写出的代码更容易扩展,维护! 比较容易懂. 装饰模式: ...

  2. GOF23设计模式(结构型模式)代理模式~

    代理模式应用场景十分广泛,随便一个框架都会用到,因此学好代理模式对后续框架学习是最基本的要素!!今天我们就来讲讲代理模式! 目录 1.简介 1. 核心作用 2. 角色分析 2. 应用场景 4. 分类 ...

  3. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

  4. GOF23设计模式(创建型模式)单例模式

    目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...

  5. Python七大原则,24种设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责.  2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE ...

  6. Java设计模式:单例模式

    学而时习,稳固而之心, 好久没有复习java的知识了,今天有空温习了单例模式,这里记录一下 单例模式是常见的设计模式的一种,其特点就是 指一个类只有一个实例,且该类能自行创建这个实例  , 保证一个类 ...

  7. 设计模式中的六大基本原则

    软件设计中的基本共识: 1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好.高内聚不仅体现在模块上,单独的类或方法也应该是内聚 ...

  8. JS中的7种设计模式

    第九章Refactoring to OOP Patterns 重构为OOP模式 7种设计模式: 1,模版方法模式(template method) 2,策略模式(strategy) 3,状态模式(st ...

  9. 设计模式之创建型汇总

    设计模式 创建型 工厂方法模式 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 使用场景: 创建对象需要大量重复的代码 客户端(应用层)不依 ...

最新文章

  1. python需要音语基础_英语基础一般,如何才能学习C语言编程和Python
  2. caffe data层_Caffe 学习:Eltwise层
  3. javascript中的正则匹配函数exec(),test(),match()
  4. OpenCV的随机生成器和输出显示文本
  5. OllyDbg笔记-异常忽略相关设置
  6. python下载大文件mp4_Python3 使用requests模块显示下载大文件显示进度
  7. java excel 晒新年操作_JAVA使用POI操作excel
  8. java实体类中有枚举类型_实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以...
  9. 强人工智能基本问题:神经网络分层还是不分层
  10. google 地图 V3 运动轨迹
  11. 你能在windows上创建一个叫做AUX的文件夹吗?
  12. angular之factory、service、provider
  13. FPGA——1位全加器的实现
  14. linux下安装使用dig命令
  15. mysql批量导入csv数据_csv批量导入mysql命令
  16. c语言太极图编程语言,C语言画图之 画个太极图
  17. c语言打砖块小游戏,C语言动画(打砖块游戏)
  18. 移动最快apn服务器,中国移动修改APN为CMTDS提高4G网速
  19. 详解利用基于gensim的TF-IDF算法实现基于文本相似度的推荐算法
  20. 怎样在几何画板中查看课件制作过程

热门文章

  1. Java两则故障分析和常见连接超时时间
  2. HTML5+CSS3实现的小风车-转动的童年
  3. 文曲星猜数游戏的非TDD实现
  4. 【Java线程】多线程实现简单的一对一聊天
  5. Mysql导入数据时-data truncated for column..
  6. Token 认证的来龙去脉
  7. 《电子基础与维修工具核心教程》——2.4 电阻的串并联
  8. Oracle10g下载地址
  9. golang小程序试验(二)
  10. C# 效率也不是很差嘛