国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
GoF設(shè)計(jì)模式之二十一 Strategy- -

 

                                      

    C9) Strategy(策略模式)
    定義:定義一個(gè)算法集,封裝每個(gè)算法,并使得其可互換。策略模式讓算法脫離調(diào)用它的客戶(hù)端而獨(dú)立地改變。
    這個(gè)模式實(shí)際上我們經(jīng)常會(huì)不自覺(jué)地用到,大部分的程序其實(shí)都是算法或者邏輯的實(shí)現(xiàn),現(xiàn)在WorkFrame從某種角度來(lái)看,也可以稱(chēng)為策略模式的實(shí)際運(yùn)用:將數(shù)據(jù)傳遞等工作交給WorkFrame來(lái)完成,程序員更多的關(guān)注于業(yè)務(wù)邏輯也就是某種數(shù)據(jù)處理算法的實(shí)現(xiàn)。Java中常見(jiàn)的Comparator接口就是一個(gè)策略模式的體現(xiàn),通常在對(duì)集合類(lèi)進(jìn)行排序時(shí)候,我們都可以自己實(shí)現(xiàn)一個(gè)Comparator的算法來(lái)排列數(shù)據(jù)的先后順序,這里說(shuō)的并不是排序的算法(冒泡、分組等)而是指的Object大小的比較算法。下面是個(gè)簡(jiǎn)單的用例子,加以說(shuō)明:集合中的對(duì)象為學(xué)生信息,有學(xué)號(hào)、名字兩項(xiàng)
    public class Student {
        private int id;
        private String name;
    }

    下面是比較的算法,第一個(gè)是按照學(xué)號(hào)排序,第二個(gè)是按照名字的第一個(gè)字排序后再按照學(xué)號(hào)排序,稍微復(fù)雜點(diǎn)。
    public class StudIdComp implements Comparator {
        public int compare(Object o1, Object o2) {
            if (o1 instanceof Student && o2 instanceof Student) {
                return ((Student)o1).getId() - ((Student)o2).getId();
            }else
                throw new ClassCastException("not Student");
        }
        public boolean equals(Object obj) {
            return this.equals(obj);
        }
    }
    public class StudNmIdComp implements Comparator {
        public int compare(Object o1, Object o2) {
            if (o1 instanceof Student && o2 instanceof Student) {
                String n1 = ((Student)o1).getName().substring(0,1);
                String n2 = ((Student)o2).getName().substring(0,1);
                int c = n1.compareTo(n2);
                if (c == 0) {
                    return ((Student)o1).getId() - ((Student)o2).getId();
                }else
                    return c;
            }else
                throw new ClassCastException("not Student");
        }
        public boolean equals(Object obj) {
            return this.equals(obj);
        }
    }

    客戶(hù)端使用Collections.sort(studentList,new StudNmIdComp());就可以完成第二種的排序,也可以按照要求作出不同的比較算法。


   參考:
1、 http://www.jdon.com/designpatterns/designpattern_Strategy.htm(中文、java實(shí)例)
2、 http://www.dofactory.com/Patterns/PatternStrategy.aspx(英文、C#實(shí)例、UML)
3、 http://www.caterpillar.onlyfun.net/PmWiki/pmwiki.php/DesignPattern/StrategyPattern(中文、java實(shí)例、UML)推薦
4、 http://www.techscore.com/tech/DesignPattern/Strategy.html(日文、java實(shí)例、UML)推薦

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
js對(duì)象定義的幾種方法
java判斷一個(gè)對(duì)象是否為空
Java基礎(chǔ)-day09-對(duì)象&類(lèi)&封裝 學(xué)生管理系統(tǒng)
前端面試題整理——原型和原型鏈
Java多態(tài)總結(jié)
Java服務(wù)器端List對(duì)象轉(zhuǎn)換為JSON對(duì)象并返回客戶(hù)端實(shí)例
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服