<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

    常用鏈接

    常用設(shè)置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(lèi)(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 156615
    • 排名 - 390

    最新評(píng)論

    [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),Strategy Pattern,策略模式
    [環(huán)境]:StarUML5.0 + JDK6
    [作者]:Winty (wintys@gmail.com) http://m.tkk7.com/wintys/
    [正文]:
    策略模式:排序算法

    package pattern.strategy.sort;

    /**
     * 策略模式:Strategy Pattern
     *
     * 排序算法策略
     *
     * @version 2009-05-22
     * @author Winty (wintys@gmail.com) http://m.tkk7.com/wintys
     *
     */
    public class SortStrategyTest {
        public static void main(String[] args) {
            Sorter<?> sorter;
                
            Integer[] data = new Integer[]{548,85,984,3,2,44,99};
            sorter = new Sorter<Integer>(data , "QuickSort");
            sorter.printArray();
            sorter.sort();
            sorter.printArray();
            
            String[] strs = new String[]{"B","C","D","A","X","F","E"};
            sorter = new Sorter<String>(strs , "InsertionSort");
            sorter.printArray();
            sorter.sort();
            sorter.printArray();        
        }
    }

    class Sorter<T extends Comparable<T>>{
        private T[] data;
        private SortStrategy<T> strategy;
        
        @SuppressWarnings("unchecked")
        public Sorter(T[] data , String sortStrategy){
            this.data = data;
            
            //利用反射動(dòng)態(tài)加載策略類(lèi)
            String pack = this.getClass().getPackage().getName();
            pack += ".";
            try {

                Class<?> cl = Class.forName(pack + sortStrategy);
                strategy = (SortStrategy<T>) cl.newInstance();//unchecked
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        
        public void sort(){
            strategy.sort(data);
        }
        
        public void printArray(){
            for(int i=0;i<data.length;i++){
                System.out.print(""+data[i]+" ");
            }
            System.out.println("");
        }
    }

    /**
     * 抽象排序算法類(lèi)
     * @author Winty
     *
     * @param <T> 實(shí)現(xiàn)了Comparable<T>接口的類(lèi)
     */
    abstract class SortStrategy<T extends Comparable<T>>{
        public abstract void sort(T[] data);
    }

    /**
     * 插入排序
     * @author Winty
     */
    class InsertionSort<T extends Comparable<T>> extends SortStrategy<T>{

        @Override
        public void sort(T[] data) {
            int len;
            T temp;
            len=data.length;

            for(int i=1;i<len;i++){
                int k;
                k=0;
                temp=data[i];
                for(int j=i-1;j>=0;j--){
                    k=i;
                    if(data[j].compareTo(temp) > 0){
                        data[j+1]=data[j];
                        k=j;
                    }
                    else if(data[j].compareTo(temp) < 0){
                        k=j+1;
                        break;
                    }
                }
                data[k]=temp;
            }    
        }    
    }

    /**
     * 快速排序
     * @author Winty
     */
    class QuickSort<T extends Comparable<T>> extends SortStrategy<T>{

        @Override
        public void sort(T[] data) {
            quick(data , 0 , data.length - 1);        
        }

        private void quick(T[] data , int p , int r){
            int q;

            if (p < r){
                q = partition(data , p , r);
                quick(data , p , q - 1);
                quick(data , q + 1 , r);
            }
        }

        private int partition(T[] data , int p ,int r){
            int i;
            T pivot , temp;
            
            i = p - 1;
            pivot = data[r];

            for(int j = p; j <= r - 1;j++){
                if(data[j].compareTo(pivot) < 0){
                    i++;
                    temp = data[i];
                    data[i] = data[j];
                    data[j] = temp;
                }
            }
            temp = data[i + 1];
            data[i + 1] = data[r];
            data[r] = temp;

            return i + 1;
        }
    }

    posted on 2009-06-14 17:54 天堂露珠 閱讀(1324) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Pattern

    FeedBack:
    # re: [原]策略模式-排序算法 2009-06-14 18:51 愛(ài)吃魚(yú)頭
    很好的例子,UML圖畫(huà)得也很漂亮,收藏了。  回復(fù)  更多評(píng)論
      
    # re: [原]策略模式-排序算法 2009-06-15 13:09 找個(gè)美女做老婆
    厲害,我用排序的時(shí)候,直接用的JAVA的方法。
    Java樂(lè)園 -Java學(xué)習(xí)者的天堂。 http://www.javaly.cn Java學(xué)習(xí)交流網(wǎng)站 Java樂(lè)園群號(hào):15651281  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产精品亚洲а∨天堂2021| 久久精品亚洲一区二区三区浴池| 亚洲AV日韩AV无码污污网站| 女人毛片a级大学毛片免费| 亚洲国产精品无码久久98| 成人免费午夜在线观看| 日韩亚洲国产高清免费视频| 24小时日本在线www免费的| 亚洲色欲色欲www在线播放| 免费高清在线影片一区| 国产成人亚洲综合无| 四虎永久免费地址在线网站| 一级一看免费完整版毛片| 国产偷v国产偷v亚洲高清| 日韩人妻一区二区三区免费| 亚洲国产成人精品无码区在线网站| 欧美最猛性xxxxx免费| 亚洲a无码综合a国产av中文| 亚洲国产人成中文幕一级二级| 中文字幕av无码不卡免费| 亚洲AV人无码综合在线观看| 免费精品国产日韩热久久| 亚洲国产精品无码久久久秋霞1| 亚洲成a人片在线观看日本麻豆| 三上悠亚在线观看免费| 亚洲色图校园春色| 国产精品二区三区免费播放心| 污污污视频在线免费观看| 亚洲av色影在线| 夜夜爽免费888视频| 久久国产一片免费观看| 亚洲日本香蕉视频观看视频| 性做久久久久免费观看| 久久久久免费看黄a级试看| 亚洲中文字幕日本无线码| 亚洲国产午夜福利在线播放| 日韩人妻无码精品久久免费一 | 大地影院MV在线观看视频免费| 亚洲综合激情六月婷婷在线观看 | 国产国拍亚洲精品福利| 三年片在线观看免费观看大全动漫 |