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

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

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

    zxbyhcsdn

     

    關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn):

    關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn):
    使用場合,提供調(diào)用者需要的方法,屏蔽不需要的方法.滿足接口隔離原則.

    比如說電子商務(wù)的系統(tǒng),有訂單這個(gè)類,有三個(gè)地方會(huì)使用到,
    一個(gè)是門戶,只能有查詢方法,
    一個(gè)是外部系統(tǒng),有添加訂單的方法,
    一個(gè)是管理后臺(tái),添加刪除修改查詢都要用到.

    根據(jù)接口隔離原則(ISP),一個(gè)類對(duì)另外一個(gè)類的以來性應(yīng)當(dāng)是建立在最小的接口上.
    也就是說,對(duì)于門戶,它只能依賴有一個(gè)查詢方法的接口.

    UML結(jié)構(gòu)如下:

     

    下面是實(shí)現(xiàn)的代碼.

    //--這兒不用接口繼承,因?yàn)榭赡艹霈F(xiàn)修改了父接口影響了子接口
    interface IOrderForPortal{
        String getOrder();
    }

    interface IOrderForOtherSys{
        String insertOrder();
        String getOrder();
    }

    interface IOrderForAdmin{ //extends IOrderForPortal,IOrderForOtherSys
        String deleteOrder();
        String updateOrder();
        String insertOrder();
        String getOrder();
    }

    /*
    interface IOrderForPortal{
        String getOrder();
    }

    interface IOrderForOtherSys{
        String insertOrder();
    }

    interface IOrderForAdmin extends IOrderForPortal,IOrderForOtherSys{
        String updateOrder();
        String deleteOrder();
    }
    */

    class Order implements IOrderForPortal,IOrderForOtherSys,IOrderForAdmin{
        private Order(){
            //--什么都不干,就是為了不讓直接 new,防止客戶端直接New,然后訪問它不需要的方法.
        }

        //返回給Portal
        public static IOrderForPortal getOrderForPortal(){
            return (IOrderForPortal)new Order();
        }
        //返回給OtherSys
        public static IOrderForOtherSys getOrderForOtherSys(){
            return (IOrderForOtherSys)new Order();
        }
        //返回給Admin
        public static IOrderForAdmin getOrderForAdmin(){
            return (IOrderForAdmin)new Order();
        }

        //--下面是接口方法的實(shí)現(xiàn).只是返回了一個(gè)String用于演示---------------

        public String getOrder(){
            return "implemented getOrder";
        }

        public String insertOrder(){
            return "implemented insertOrder";
        }

        public String updateOrder(){
            return "implemented updateOrder";
        }

        public String deleteOrder(){
            return "implemented deleteOrder";
        }
    }

    public class TestCreateLimit{
        public static void main(String[] args){
            IOrderForPortal orderForPortal = Order.getOrderForPortal();
            IOrderForOtherSys orderForOtherSys = Order.getOrderForOtherSys();
            IOrderForAdmin orderForAdmin = Order.getOrderForAdmin();

            System.out.println("Portal門戶調(diào)用方法:"+orderForPortal.getOrder());
            System.out.println("OtherSys外部系統(tǒng)調(diào)用方法:"+orderForOtherSys.insertOrder());
            System.out.println("Admin管理后臺(tái)調(diào)用方法:"+orderForAdmin.getOrder()+";"+orderForAdmin.insertOrder()+";"+orderForAdmin.updateOrder()+";"+orderForAdmin.deleteOrder());
        }
    }


    這樣就能很好的滿足接口隔離原則了,調(diào)用者只能訪問它自己的方法,不能訪問到不應(yīng)該訪問的方法.

    歡迎討論...寫這些的目的就是為了共同進(jìn)步,有什么錯(cuò)誤或者不足,歡迎指出....

    posted on 2008-07-25 18:03 zxbyh 閱讀(3123) 評(píng)論(8)  編輯  收藏 所屬分類: OOAD

    評(píng)論

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2008-07-25 23:49 hoho強(qiáng)

    恩 不錯(cuò) 之前沒看到過這樣的方法  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2008-07-26 14:29 zhuxing

    寫的還是不錯(cuò)的

    ISP作為OO中5個(gè)最主要的設(shè)計(jì)原則之一,在實(shí)際運(yùn)用的時(shí)候往往會(huì)在實(shí)現(xiàn)細(xì)節(jié)上面出問題,關(guān)鍵是如何管理窄接口對(duì)應(yīng)實(shí)例的問題,核心是創(chuàng)建實(shí)例化任務(wù)的封裝。

    以樓主的例子為例,樓主很好的利用的creation method(以靜態(tài)公共接口提供實(shí)例)的方式,很好的將目標(biāo)接口對(duì)應(yīng)實(shí)例創(chuàng)建和初始化進(jìn)行了封裝,并和窄接口的使用客戶端進(jìn)行了解藕。如果不是這樣,那么ISP的原則可能就在客戶端創(chuàng)建實(shí)例的過程中被扭曲了。

    更負(fù)責(zé)一些的情況,可以果斷的采用工廠的方式提供實(shí)例。寧可稍微過度設(shè)計(jì),也要堅(jiān)決避免藕合。  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2008-07-26 16:31 fish4j

    不錯(cuò)的文章,言簡意賅 , 個(gè)人感覺配合工廠效果會(huì)更好 ^^  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2008-07-26 19:23 zxbyh

    對(duì),這兒可以配合工廠.
    但是我講這個(gè)的重點(diǎn)是怎樣解決 隔離的問題,
    我擔(dān)心再拉進(jìn)工廠,會(huì)沖淡主題了!!  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2008-10-26 22:20 C#

    學(xué)習(xí)學(xué)習(xí)  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2009-01-09 08:26 seman

    //因?yàn)镺rder.getOrderForPortal()返回的實(shí)質(zhì)還是Order類,只是窄化了
    //如果client知道,并強(qiáng)制轉(zhuǎn)換成Order的話,則后果很難想象

    System.out.println("Portal門戶調(diào)用方法:" + ((Order)orderForPortal).insertOrder());
      回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2009-03-06 09:16 sys

    如果這三個(gè)接口中任意一個(gè)有變化怎么辦??  回復(fù)  更多評(píng)論   

    # re: 關(guān)于接口隔離原則的一個(gè)實(shí)現(xiàn): 2009-11-26 21:17 zxbyh

    一般來說接口是抽象層次上的,屬于比較高層次的業(yè)務(wù)邏輯,在設(shè)計(jì)的時(shí)候盡量考慮不會(huì)發(fā)生變化.

    比如說,你的主板上的內(nèi)存插槽是DDR2的,你就只能上DDR2的內(nèi)存,
    如果要變成DDR3的接口,那只有考慮更換主板.
    其實(shí)當(dāng)發(fā)生這樣的情況的時(shí)候,就是應(yīng)當(dāng)考慮"重構(gòu)"了.
      回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成人无码WWW免费视频| 免费一区二区无码视频在线播放 | 精品国产亚洲一区二区三区 | 免免费国产AAAAA片| 亚洲色图视频在线观看| 最近免费视频中文字幕大全| 亚洲伊人久久大香线蕉苏妲己| 免费在线中文日本| 日本久久久久亚洲中字幕| 久久这里只精品国产免费10| 亚洲天堂中文资源| 日本视频一区在线观看免费| 亚洲国产成AV人天堂无码| 午夜一级毛片免费视频| WWW亚洲色大成网络.COM| 免费人成视频在线观看不卡| 亚洲日韩在线观看免费视频| 国产精品国产亚洲精品看不卡| 久久国产免费观看精品3| 亚洲AV无码久久久久网站蜜桃| 无码人妻一区二区三区免费| 亚洲va中文字幕| 久久激情亚洲精品无码?V| 久久免费线看线看| 亚洲国产精品线观看不卡| 成人毛片免费播放| 一级免费黄色毛片| 亚洲精品国产成人专区| 国外成人免费高清激情视频| 免费看内射乌克兰女| 久久精品国产精品亚洲色婷婷| 国产香蕉免费精品视频| 老司机福利在线免费观看| 亚洲AV中文无码乱人伦下载| A级毛片内射免费视频| 国产精品极品美女自在线观看免费| 国产亚洲福利精品一区| 成年女人毛片免费播放人| 精品无码国产污污污免费网站国产 | 久久影视国产亚洲| 国产精品视频免费观看|