小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

GoF設(shè)計(jì)模式之七 Bridge- -

 wtf_soft 2005-07-22

 

                                      

    B2) Bridge (橋模式)
    定義: 把抽象從實(shí)現(xiàn)中分離出來,使得兩者可以獨(dú)立的變化。
    字面上很難理解定義的意思,那從另外一個(gè)方面來講,一個(gè)對象可以看作是對象本身和對象行為的結(jié)合,那么對于一個(gè)抽象對象的具體實(shí)現(xiàn),就是對其自身和行為的實(shí)現(xiàn)。而將抽象與實(shí)現(xiàn)分離,也就是將自身與行為的分離。打個(gè)比方,人是個(gè)抽象的定義,那人有吃飯這個(gè)抽象的行為。對于人的一個(gè)實(shí)例中國人,吃飯時(shí)候用筷子,而印度人用手,美國人用刀叉。這樣就有了三個(gè)實(shí)現(xiàn),但中國人有時(shí)候吃飯也用刀叉,美國人也會(huì)用筷子,這時(shí)候如果按照原先的方法,又需要生成兩個(gè)新的實(shí)現(xiàn),如此就變得復(fù)雜而混亂。于是,橋模式就有了用武之地。把人本身與吃飯這個(gè)行為分離開來,人有不同的實(shí)現(xiàn),如中國人,美國人,而吃飯也有不同的實(shí)現(xiàn),如用筷子,用手。有點(diǎn)像以前考試?yán)锩娴倪B線題,左邊是某個(gè)歷史人物(對象),右邊是發(fā)生的歷史事件(行為),用直線連接,這條線就是一座橋,當(dāng)然可能一個(gè)人做過幾件事情。那就以人吃飯為例子,來看橋模式的實(shí)現(xiàn)方法。下面是人和吃飯的抽象類。
    public abstract class Person {
        private PersonImp personImp;
        public Person(PersonImp pImp) {
            personImp = pImp;
        }
        public void eat() {
            personImp.eat();
        }
        public String getCountry() {
            return "world";
        }
    }
    public abstract class PresonImp {
        public abstract void eat();
    }
    接下來實(shí)現(xiàn)人吃飯的行為,筷子和刀叉
    public class EatByCS extends PresonImp {
        public void eat() {
            // eat by chopsticks
        }
    }
    public class EatByKF extends PresonImp {
        public void eat() {
            // eat by knives and forks
        }
    }

    那么,美國人和中國人的實(shí)現(xiàn)就是
    public class American extends Person {
        public String getCountry() {
            return "America";
        }
    }
    public class Chinese extends Person {
        public String getCountry() {
            return "China";
        }
    }

    美國人用筷子吃飯和中國人用刀叉就可以表示為
    Person personA = new American(new EatByCS());
    personA.eat();
    Person personC = new Chinese(new EatByKF());
    personC.eat();

    其他不同的對象與行為的組合也可以以此類推,人可以自由派生,吃飯的方法也可以隨意改變,兩者變化對對方毫無干擾,體現(xiàn)了橋模式的優(yōu)勢。非常有效的對已有對象的利用,結(jié)構(gòu)層次清晰且更加易于擴(kuò)展,這就是結(jié)構(gòu)模式的用途。


   參考:
1、 http://www./designpatterns/bridge.htm(中文、java實(shí)例)
2、 http://www./Patterns/PatternBridge.aspx(英文、C#實(shí)例、UML)
3、 http://www./tech/DesignPattern/Bridge.html(日文、java實(shí)例、UML)推薦

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多