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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    java設(shè)計模式-橋接模式(屌絲男學(xué)設(shè)計模式)

    本文介紹設(shè)計模式中的橋接(Bridge)模式的概念,用法,以及實際應(yīng)用中怎么樣使用橋接模式進行開發(fā)。

    Bridge模式的概念

    Bridge 模式是構(gòu)造型的設(shè)計模式之一。Bridge模式基于類的最小設(shè)計原則,通過使用封裝,聚合以及繼承等行為來讓不同的類承擔(dān)不同的責(zé)任。它的主要特點是把抽象(abstraction)與行為實現(xiàn)(implementation)分離開來,從而可以保持各部分的獨立性以及應(yīng)對它們的功能擴展。

    Bridge模式的應(yīng)用場景

    面向?qū)ο蟮某绦蛟O(shè)計(OOP)里有類繼承(子類繼承父類)的概念,如果一個類或接口有多個具體實現(xiàn)子類,如果這些子類具有以下特性:
    - 存在相對并列的子類屬性。
    - 存在概念上的交叉。
    - 可變性。
    我們就可以用Bridge模式來對其進行抽象與具體,對相關(guān)類進行重構(gòu)。

    為了容易理解,我們舉例說明一下,比如屌絲(DiaoSi),假設(shè)有2個子類,男屌絲類(ManDiaoSi)與女屌絲類(WomanDiao),它們有[窮挫矮]這個動作行為,通過不同窮挫矮特征的設(shè)置,可以將它們設(shè)置為比如為擁有黑木耳男屌絲或(擁有擼管王的女屌絲),和擁有紫木耳男屌絲或(擁有擼神的女屌絲)的各種屌絲。
    這樣,不管是黑木耳男屌絲還是紫木耳男屌絲,又或是有擼管王的女屌絲還是有擼神的女屌絲,它們都可以是屌絲類的子類,而且:
    - 存在相對并列的子類屬性。屌絲的種類,與屌絲窮挫矮的規(guī)格是屌絲的2個并列的屬性,沒有概念上的重復(fù)。
    - 存在概念上的交叉。不管是男屌絲還是女屌絲,都是窮挫矮,黑窮丑的屌絲。
    - 可變性。除了男屌絲,女屌絲之外,可能還有人妖屌絲;除了有黑木耳(擼管王)與紫木耳(擼神)特征的屌絲之外,還可能有紫黑木耳(擼圣)的屌絲等等。

    這樣一來,我們怎么來設(shè)計屌絲類呢?

    方法一

    通過繼承設(shè)計所有可能存在的子類。可能我們會想到下面的這種繼承關(guān)系:
    屌絲總類:DiaoSi
    屌絲子類 - 按種類分類:ManDiaoSiWomanDiao
    屌絲子類 - 按特征分類:擁有黑木耳男屌絲,擁有擼管王的女屌絲擁有紫木耳男屌絲擁有擼神的女屌絲
    這樣設(shè)置特征這個動作就由各個子類加以實現(xiàn)。

    但如果以后需要增加一種人妖屌絲(GuyDiaoSi),以及增加一個特征規(guī)格紫黑木耳,需要實現(xiàn)的子類將會有:
    擁有黑木耳男屌絲,擁有擼管王的女屌絲擁有紫木耳男屌絲擁有擼神的女屌絲  擁有紫黑木耳男屌絲 擁有擼管王的人妖屌絲 擁有紫黑木耳人妖屌絲 擁有紫木耳人妖屌絲
     等等。
    也就是說,這種設(shè)計方法,子類數(shù)目將隨幾何級數(shù)增長。
    而且,擁有黑木耳男屌絲擁有紫木耳人妖屌絲的特征規(guī)格相同,它們的特征設(shè)置動作應(yīng)該是一樣的,但現(xiàn)在把它們分成不同的子類,難以避免執(zhí)行重復(fù)的動作行為。

     

    方法二

    分別為男屌絲以及女屌絲實現(xiàn)設(shè)置不同特征的方法
    屌絲總類:DiaoSi
    屌絲子類:ManDiaoSiWomanDiao

    然后在男屌絲類里分別提供黑木耳(擼管王)以及紫木耳(擼神)特征的設(shè)置方法:
    ManDiaoSi extends DiaoSi
     {
        public setFeatures黑木耳();
        public setFeatures紫木耳();
    }

    在女屌絲類里也分別提供擼管王以及擼神特征的設(shè)置方法:
    WomanDiao extends DiaoSi
     {
        public setFeatures擼管王();
        public setFeatures擼神();
    }

    這種情況,子類的數(shù)量是被控制了。但一方面,如果每增加一種特征規(guī)格,需要修改所有的屌絲子類;另一方面,即使特征的設(shè)置行為一樣,但是不同的屌絲子類卻需要提供完全一樣的方法。

    在實際的應(yīng)用開發(fā)中,以上2種方法都會造成遷一發(fā)而動全身,而且會存在大量的重復(fù)代碼。

    Bridge模式可以很好的解決這類問題。
    Client
        Bridge模式的使用者
    Abstraction
        抽象類接口(接口或抽象類)
        維護對行為實現(xiàn)(Implementor)的引用
    Refined Abstraction
        Abstraction子類
    Implementor
        行為實現(xiàn)類接口 (Abstraction接口定義了基于Implementor接口的更高層次的操作)
    ConcreteImplementor
        Implementor子類

     

    Bridge模式的應(yīng)用范例

    我們來看看怎么應(yīng)用Bridge模式來設(shè)計汽車類。

    抽象 - Abstraction類:屌絲類及其子類:
    屌絲總類:DiaoSi
    屌絲子類 - 按種類分類:ManDiaoSiWomanDiao
    屌絲子類 - 按特征分類:擁有黑木耳男屌絲,擁有擼管王的女屌絲擁有紫木耳男屌絲擁有擼神的女屌絲

    行為實現(xiàn) - Implementor:屌絲特征設(shè)置的行為類及子類
     setFeatures:屌絲特征的設(shè)置接口
     setFeatures黑木耳();
    setFeatures紫木耳();

    代碼:

    package ITfarmer.designpatterns.study.bridge;

    //測試

    public class Client
    {
        public static void main( String[] argv )
        {
            Features 黑木耳= new  男屌絲特征();

             Features 木耳= new  
    女屌絲特征();
           
            DiaoSi 擁有黑木耳的男屌絲= new  ManDiaoSi( 黑木耳 );
             DiaoSi 擁有紫木耳的男屌絲= new  ManDiaoSi( 紫木耳 );
            擁有黑木耳的男屌絲.setFeatures();
            擁有紫木耳的男屌絲.setFeatures();
           
            DiaoSi 擁有黑木耳的女屌絲= new WomanDiao( 黑木耳 );
            Vehicle 擁有紫木耳的女屌絲= new WomanDiao( 紫木耳 );
          擁有黑木耳的女屌絲.setFeatures();
            擁有紫木耳的女屌絲.setFeatures();
           
        }
    }

    package ITfarmer.designpatterns.study.bridge;


     *
     * @author
     * @since 2012/12/05
     */
    public abstract class DiaoSi
    {
        private Features features;

        Vehicle( Features features)
        {
            this.setFeatures features);
        }
       
        public abstract void setFeatures();

        public void setFeaturesFeatures features)
        {
            this.featuresfeatures;
        }

        public Features getFeatures()
        {
            return  features;
        }
    }

    package ITfarmer.designpatterns.study.bridge;

    //Abstraction子類:這里為屌絲抽象類的子類

    public class ManDiaoSi extends DiaoSi
    {
        public ManDiaoSi (Features features
    )
        {
            super( features
     );
        }
       
        @Override
        public void setFeatures()
        {
            System.out.print("男屌絲的特征: ");
            getFeatures.setFeatures();
        }
    }

    package ITfarmer.designpatterns.study.bridge;

    //Abstraction子類:這里為屌絲抽象類的子類

    public class WomanDiaoSi extends DiaoSi
    {
        public WomanDiaoSi ( Features features
     )
        {
            super( features
    );
        }

        @Override
        public void  setFeatures()
        {
            System.out.print("女屌絲的特征: ");
            getFeatures().seFeatures();
        }

    }

    package ITfarmer.designpatterns.study.bridge;

    //屌絲類的行為接口

    public interface Features
    {
        public void setFeatures();
    }

    package ITfarmer.designpatterns.study.bridge;

    /** ConcreteImplementor */
    //行為實現(xiàn)子類

    public class 男屌絲特征 implements Features
    {

        public void setFeatures()
        {
            System.out.println("黑木耳 或者 擼管王");
        }   
       
    }

    package ITfarmer.designpatterns.study.bridge;

    /** ConcreteImplementor */
    //行為實現(xiàn)子類

    public class  女屌絲特征 implements Features
    {

        public void setFeatures()
        {
            System.out.println("黑木耳 或者 擼管王");
        }   
       
    }

    小結(jié):Bridge模式是一種抽象與其實現(xiàn)相分離的模式。它主要應(yīng)用于:當事物是一組變化量,和對這些事物的操作方法(實現(xiàn))也是一組變化量的情況,也就是說它們都是多變的。

     

    posted on 2012-12-05 16:21 順其自然EVO 閱讀(1499) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式學(xué)習(xí)

    <2012年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久99国产亚洲高清观看首页 | 2022年亚洲午夜一区二区福利| 黄页网站在线视频免费| 国产精品色午夜视频免费看| 亚洲av午夜国产精品无码中文字 | 亚洲国产成人久久精品动漫 | 免费大片av手机看片高清| 在线观看亚洲免费| 国产亚洲美女精品久久久久| 日本二区免费一片黄2019| 黄页视频在线观看免费| 亚洲综合区小说区激情区| 久久久国产精品亚洲一区| 全部免费毛片在线播放| 永久免费AV无码网站在线观看| 亚洲人成亚洲精品| 久久午夜夜伦鲁鲁片免费无码影视 | 东北美女野外bbwbbw免费| 亚洲第一AAAAA片| 又大又硬又爽又粗又快的视频免费| 亚洲精品中文字幕乱码影院| 久久久久久国产a免费观看黄色大片 | 免费一级毛片在线播放| 一级毛片视频免费| 亚洲国产精品无码一线岛国| 日本卡1卡2卡三卡免费| 亚洲成a人不卡在线观看| 四虎影院免费在线播放| 国产成人高清精品免费观看| 久久91亚洲精品中文字幕| 国产精品成人免费一区二区| 美女无遮挡免费视频网站| 亚洲人成网77777色在线播放| 一级毛片免费视频| 久久久久久亚洲精品无码| www免费黄色网| 97se亚洲综合在线| 国产乱色精品成人免费视频| 国产精品亚洲专区无码不卡| 国产AV无码专区亚洲AV毛网站| 欧美大尺寸SUV免费|