【原創·教程·連載】《Android之大話設計模式》–設計原則 第一章:針對介面編程 不要針對實現編程

來源:互聯網
上載者:User
<大話設計模式>本教程說明及著作權聲明

l 該文檔參考和使用了網路上的免費開放的圖片和內容,並以免費開放的方式發布,希望為移動互連網和智能手機時代貢獻綿薄之力!可以隨意轉載,但不得使用該文檔謀利。

l 如果對該文檔有任何疑問或者建議,請進入官方部落格

   http://www.cnblogs.com/guoshiandroid/留言或者直接與國士工作室聯絡(後附連絡方式),我們會謹慎參考您的建議並根據需要對本文檔進行修改,以造福更多開發人員!

l 《大話設計模式》的最新及完整內容會在國士工作室官方部落格定期更新,請訪問國士工作室部落格

http://www.cnblogs.com/guoshiandroid/擷取更多更新內容。

國士工作室是一支專註於Android平台企業級應用開發的技術團隊,致力於做中國最棒的Android應用程式開發機構,提供最棒的Android企業級應用開發培訓服務。

企業培訓和開發合作官方連絡方式:

     電話:18610086859

     Email:hiheartfirst@gmail.com

     QQ:1740415547

     QQ群:148325348

國士工作室 有你更美好!


 

  查看其他部分:本教程整體說明及章節索引

本文PDF下載連結

針對介面編程-問世間情為何物 直教人生死相許 

應用情境舉例

“十六年後 在此重會;夫妻情深 勿失信約”,悲痛欲絕的楊過跑到斷腸崖,看到小龍女親手留在石壁上的文字,即驚喜又痛苦不欲生:“十六年!為什麼要等到十六年?!”。

但是信約已定,癡情的楊過也只能等十六年了。

離開斷腸崖後,楊過一邊開始了自己的苦苦的等待與思戀,一邊寄情練功,當然開始時

候也忘不了吃那療傷的草藥。後來楊過巧遇了千年神鵰,和神鵰一見如故,從此便開始修鍊獨孤求敗的武功。無事可做,寄情練劍倒也不失為人生的一大快事。“相思無用,唯別而已。別期若有定,千般煎熬又何如?莫道黯然銷魂,何處柳暗花明?!”,驚天地泣鬼神的黯然銷魂掌就這樣誕生了。時

光飛逝,恍惚間快過了十六年。此時,楊過的神功已成,想象著十六年約期就將來臨,心中想象著自己一生的摯愛,不免感慨和激動萬分!在祭拜過求敗他老人家之後,楊過和神鵰一起開始去赴那場長達十六年之久的約會。令眾生激動和豔羨。

再出江湖的楊過懲奸除惡、幫扶弱小,很快就俠名遠播,被人尊稱為“神鵰俠”。自己心中想象著小龍女過往的一笑一顰,想象著她是怎麼度過這十六年的,不禁催生了更加濃烈的相思和相見之情。

千呼萬喚,終於,這一天來到!

斷腸崖邊,佳人芳蹤跡未現,過兒萬念俱灰,縱身跳下懸崖…

幸好懸崖下面是深淵,楊過並沒有死,被水衝到了岸邊的楊過蘇醒過來後,看到了很多小蜜蜂,他一眼就認出了這是小龍女樣的蜜蜂,莫非龍兒就在附近?最後在深潭水下,楊過找到了自己苦苦等待了十六年的摯愛。原來小龍女得知自己無藥可救,也縱身跳下斷腸崖,十六年之期只不過是為了讓楊過不要輕生。但是跳崖後的小龍女並沒有死掉,接著就在穀底一個世外桃源的地方慢慢的療傷,竟然完全康複了。真是有情人終成眷屬,有情人終成名人。

定義: 

介面是一系列方法的聲明,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此

這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

      介面是對抽象的抽象。

      介面就是標準,就是承諾。

      針對介面編程,不要針對具體編程是依賴倒轉原則的另外一種表述。

      針對介面編程又稱為面向介面編程,針對介面編程就是要先設計一系列的介面,把設計和實現分離開,使用時只需引用介面即可,也由於系統各部分的解耦合。如所示:

故事分析: 

       “十六年後 在此重會;夫妻情深 勿失信約”就是針對介面編程的一個絕妙的例子。而且最後還加了“信約”一次。言外之意就是說我們說好了要十六年在此地重逢,我們倆都要遵照此約定。根據上面的故事,小龍女和楊過制定好介面後,就縱身跳下了懸崖,不管自己的過兒了,因為她此時已經不用關心過兒怎麼去再十六年後河自己相見,只要十六年後在此地相見即可,也就是說小龍女針對和使用都是介面,至於楊過怎麼實現,她此時已經身患絕症而無法顧及了。而楊過看過此約定後,雖然無奈,但也只好照辦。具體實現如下:回去吃斷腸草調理自己,然後以神鵰為伴練習武功,知道練成了黯然銷魂掌而神功大成,然後就是在江湖上做俠義之事,然後就是按照信約與十六年後來

到斷腸崖邊;而小龍女就在穀底慢慢的調養,十六年後身體早已康複,而且越發迷人了。當楊過沒有見到小龍女時縱身跳崖,遵照了“問世間情為何物,直教人生死相許”標準。

       總結一下:小龍女和楊過定下介面,然後各自針對介面各自獨立的做事,最終得以相見。

       針對介面編程是未來提高程式的可維護性、延展性和可複用性。如果你在一個類中直接使用另外的一個,這樣就把兩個類緊密的聯絡在了一起,以後如果想做出改變就很難了。如果針對介面編程,當業務變化時我們只需要用一個新的類實現介面即可,而用戶端依舊可以使用介面引用新的類的,同時也保證了用戶端的不變性。這樣用戶端和實現端互不影響,保持了各自的相對獨立性。正如小龍女和楊過的,他們樹立了十六年制約後,就不用關心彼此的如何去赴這場約定,只需要按照約定做事就OK了。互不影響,自由在在。如所示:

Java代碼實現: 

       建立一個“信約”的介面,這個介面是楊過和小龍女都必須通過自己的方式實現的。代碼如下:

package com.diermeng.designPattern.dating;

/*

 * 楊過和小龍女定下的約定介面

 */

public interface Dating {

    /*

     * 約定的介面

     */

    public void dating();

}

       然後分別建立楊過和小龍女的實作類別,分別實現上面的介面。代碼依次如下:

package com.diermeng.designPattern.dating.impl;

 

import com.diermeng.designPattern.dating.Dating;

/*

 * 楊過對介面的實現

 */

public class Yangguo implements Dating {

    /*

     * 姓名

     */

    String name;

 

    /*

     * 預設空構造方法

     */

    public Yangguo(){}

    /*

     * 傳入name參數的構造方法

     */

    public Yangguo(String name) {

        this.name = name;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

 

    /*

     * (non-Javadoc)

     * @see com.diermeng.dating.inter.Dating#dating()

     * 楊過對約定的實現

     */

    public void dating() {

        if(this.getName()!=null){

            System.out.println(this.getName()+" : "+"十六年後 在此重會;夫妻情深 勿失信約");

        }

        else{

            System.out.println("十六年後 在此重會;夫妻情深 勿失信約");

        }

    }

}

 

 

package com.diermeng.designPattern.dating.impl;

 

import com.diermeng.designPattern.dating.Dating;

/*

 * 小龍女對介面的實現

 */

public class XiaoLongnv implements Dating{

    /*

     * 姓名

     */

    String name;

 

    /*

     * 預設空構造方法

     */

    public XiaoLongnv(){}

 

    /*

     * 傳入name參數的構造方法

     */

    public XiaoLongnv(String name) {

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

 

    /*

     * (non-Javadoc)

     * @see com.diermeng.dating.inter.Dating#dating()

     * 小龍女對約定的實現

     */

    public void dating() {

        if(this.getName()!=null){

            System.out.println(this.getName()+" : "+"十六年後 在此重會;夫妻情深 勿失信約");

        }

        else{

            System.out.println("十六年後 在此重會;夫妻情深 勿失信約");

        }

    }

 

}

 

建立一個測試類別,代碼如下:

package com.diermeng.designPattern.dating.client;

import com.diermeng.designPattern.dating.Dating;

import com.diermeng.designPattern.dating.impl.XiaoLongnv;

import com.diermeng.designPattern.dating.impl.Yangguo;

/*

 * 對楊過和小龍女約定進行測試的用戶端

 */

public class DatingTest {

 

    public static void main(String[] args)

    {

        //分別執行個體化執行個體化

        Dating yangguo = new Yangguo("過兒");

        Dating xiaoLongnv = new XiaoLongnv("龍兒");

 

        //調用各自的方法

        yangguo.dating();

        xiaoLongnv.dating();

    }

}

程式運行結果如下:

過兒 : 十六年後 在此重會;夫妻情深 勿失信約

龍兒 : 十六年後 在此重會;夫妻情深 勿失信約              

已有應用簡介: 

Java是相面對象編程的語言,而物件導向編程的核心之一就是要針對針對介面編程、不要針對實現編程,在Java API中的標誌介面java.io.Serializable和java.rmi.Remote等就是我們經常遇到的,下面以java.io.Serializable為例說明一下,原始碼如下:

package java.io;

public interface Serializable{}

UML圖形如所示:

當然在J2EE架構的使用中到處都是針對介面編程的身影。例如在www.babasport.com中幾乎每一處都是針對介面編程的,令人印象非常深刻的一點就是巴巴運動網把對資料庫的CRUD等基本操作封裝在了一個統一介面中,這給以後的代碼的編寫和資料庫的操作帶來了極大的方便,當然這裡也使用了Java 5的泛形技術。有興趣的讀者可以去學習巴巴運動網的原始碼。

溫馨提示: 

       許下的承諾就是欠下的債。所以不要輕易做出承諾。

       楊過和小龍女為了承諾而付出了十六年的努力。

       在軟體設計和編碼中,如果確立了介面,也就對客戶做出了承諾,這種承諾幾乎沒有改變的機會,時間越長越是如此,因為那是別人對你介面的使用已經遍布世界各地,當然前提是你的借口很出色,這樣才能取得很多人的信賴和消費。

       不要輕易說:“我愛你“,因為這是一生的承諾。

注意:該文檔參考和使用了網路上的免費開放的圖片和內容,並以免費開放的方式發布,希望為移動互連網和智能手機時代貢獻綿薄之力!可以隨意轉載,但不得使用該文檔謀利。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.