java設計模式,java設計模式pdf

來源:互聯網
上載者:User

java設計模式,java設計模式pdf

[本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020]

  繼續上節內容,還是以對各種類型的數組進行排序為例,這時,我們考慮複雜一點,如果,我們不再按照Cat的身高進行排序,我們想以Cat的年齡作為排序的依據,再如,我們不再按Dog的food進行排序,而是以Dog的體重作為依據進行排序,該怎麼辦呢,當然了,我們可以改動Cat類,Dog類,讓其實現這些功能,但是,當類很多時,要改動每一個類,也是很麻煩的,也就是現在的這種結構不好實現。所以,我們希望我們能靈活的指定比較依據,所以,很容易想到,這要用到多態,我們可以定義一個比較子介面Comparator,然後,根據需要我們可以自訂每種類型的各種比較子如CatHeightComparator和CatWeightComparator都實現公用的比較子介面,最後,我們只需改動Cat類的compareTo()方法就行,具體實現如下:

Comparator.java

/** * 比較子 * @author jesson * */public interface Comparator {int compore(Object o1,Object o2);}
CatHeightComparator.java

/** * Cat類型高度比較子 *  * @author jesson *  */public class CatHeightComparator implements Comparator {@Overridepublic int compore(Object o1, Object o2) {// TODO Auto-generated method stubCat c1 = (Cat) o1;Cat c2 = (Cat) o2;if (c1.getHeight() > c2.getHeight())return 1;else if (c1.getHeight() < c2.getHeight())return -1;elsereturn 0;}}
CatWeightComparator.java

/** * Cat類型重量比較子 * @author jesson * */public class CatWeightComparator implements Comparator {@Overridepublic int compore(Object o1, Object o2) {// TODO Auto-generated method stubCat c1 = (Cat) o1;Cat c2 = (Cat) o2;if (c1.getWeight() > c2.getWeight())return -1;else if (c1.getWeight() < c2.getWeight())return 1;elsereturn 0;}}
Comparable.java

/** * 可比較介面 * 定義了一個比較方法 * @author jesson * */public interface Comparable {public int compareTo(Object o);}

Cat.java

/** * Cat類 有屬性身高,體重及toString()方法 *  * @author jesson *  */public class Cat implements Comparable {private int height; // 身高private int weight; // 體重//private Comparator comparator = new CatHeightComparator(); // 高度比較子private Comparator comparator = new CatWeightComparator(); // 重量比較子public Comparator getComparator() {return comparator;}public void setComparator(Comparator comparator) {this.comparator = comparator;}public Cat(int height, int weight) {// TODO Auto-generated constructor stubthis.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 this.getHeight() + "|" + this.getWeight();}/** * 實現Comparable介面的compareTO方法  * 調用具體的比較子進行比較大小 */@Overridepublic int compareTo(Object o) {return comparator.compore(this, o);}}
DataSorter.java

/** * 排序類 *  * @author jesson *  */public class DataSorter {/** * 冒泡排序方法 *  * @param Cat類型數組 */public static void bubbleSort(Object[] a) {for (int i = a.length - 1; i >= 1; i--) {for (int j = 0; j < i; j++) {Comparable o1 = (Comparable)a[j];Comparable o2 = (Comparable)a[j+1];if (o1.compareTo(o2) == 1) {swap(a, j, j + 1);}}}}/** * 冒泡排序方法 *  * @param a *            整數數組 */public static void bubbleSort(int[] a) {for (int i = a.length - 1; i >= 1; i--) {for (int j = 0; j < i; j++) {if (a[j] > a[j + 1]) {swap(a, j, j + 1);}}}}/** * 交換兩個資料 *  * @param a *            Object類型數組 * @param x *            數組下標1 * @param y *            數組下標2 */private static void swap(Object[] a, int x, int y) {// TODO Auto-generated method stubObject temp = a[x];a[x] = a[y];a[y] = temp;}/** * 交換兩個資料 *  * @param a *            數組 * @param x *            數組下標1 * @param y *            數組下標2 */private static void swap(int[] a, int x, int y) {// TODO Auto-generated method stubint temp = a[x];a[x] = a[y];a[y] = temp;}/** * 列印數組 *  * @param a *            Object類型數組 */public static void print(Object[] a) {for (int i = 0; i < a.length; i++)System.out.print(a[i] + " ");System.out.println();}/** * 列印數組 *  * @param a *            int類型數組 */public static void print(int[] a) {for (int i = 0; i < a.length; i++)System.out.print(a[i] + " ");System.out.println();}}
Test.java

/** * 測試類別 * @author jesson * */public class Test {public static void main(String[] args) {//int[] a = new int[]{9,8,2,4,5,6,7};Cat[] a = {new Cat(5,5),new Cat(1,1),new Cat(3,3)};//Dog[] a = {new Dog(3),new Dog(2),new Dog(6)};DataSorter.print(a);DataSorter.bubbleSort(a);DataSorter.print(a);}}
   通過高度比較子和重量比較子,我們就可以靈活的選擇比較的依據,這時,如果,需求再有變化,按照Cat的年齡進行排序時,只需要建立一個年齡比較子,然後為Cat類的Comparator的set方法或者Cat的構造方法傳入建立的年齡比較子,這樣不需再改動其他代碼,就可以實現Cat類型的數組按新定義的年齡進行排序,最大限度地重用了代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.