l 該文檔參考和使用了網絡上的免費開放的圖片和內容,並以避免費開放的方式發佈,但願爲移動互聯網和智能手機時代貢獻綿薄之力!能夠隨意轉載,但不得使用該文檔謀利。html
l 若是對該文檔有任何疑問或者建議,請進入官方博客java
http://www.cnblogs.com/guoshiandroid/留言或者直接與國士工做室聯繫(後附聯繫方式),咱們會慎重參考您的建議並根據須要對本文檔進行修改,以造福更多開發者!android
l 《大話設計模式》的最新及完整內容會在國士工做室官方博客按期更新,請訪問國士工做室博客數據庫
http://www.cnblogs.com/guoshiandroid/獲取更多更新內容。編程
國士工做室是一支專一於Android平臺企業級應用開發的技術團隊,致力於作中國最棒的Android應用程序開發機構,提供最棒的Android企業級應用開發培訓服務。設計模式
企業培訓和開發合做官方聯繫方式:網絡
電話:18610086859框架
Email:hiheartfirst@gmail.com學習
QQ:1740415547測試
QQ羣:148325348
國士工做室 有你更美好!
查看其餘部分:本教程總體說明及章節索引
針對接口編程-問世間情爲什麼物 直教人生死相許
應用場景舉例:
「十六年後 在此重會;夫妻情深 勿失信約」,悲痛欲絕的楊過跑到斷腸崖,看到小龍女親手留在石壁上的文字,即驚喜又痛苦不欲生:「十六年!爲何要等到十六年?!」。
可是信約已定,癡情的楊過也只能等十六年了。
離開斷腸崖後,楊過一邊開始了本身的苦苦的等待與思戀,一邊寄情練功,固然開始時 候也忘不了吃那療傷的草藥。後來楊過巧遇了千年神鵰,和神鵰一見如故,今後便開始修煉獨孤求敗的武功。無事可作,寄情練劍倒也不失爲人生的一大快事。「相 思無用,惟別而已。別期如有定,千般煎熬又何如?莫道黯然銷魂,何處柳暗花明?!」,驚天地泣鬼神的黯然銷魂掌就這樣誕生了。時 光飛逝,恍惚間快過了十六年。此時,楊過的神功已成,想象着十六年約期就未來臨,心中想象着本身一輩子的摯愛,難免感慨和激動萬分!在祭拜過求敗他老人家以後,楊過和神鵰一塊兒開始去赴那場長達十六年之久的約會。令衆生激動和豔羨。
再出江湖的楊過懲奸除惡、幫扶弱小,很快就俠名遠播,被人尊稱爲「神鵰俠」。本身心中想象着小龍女過往的一笑一顰,想象着她是怎麼度過這十六年的,不由催生了更加濃烈的相思和相見之情。
千呼萬喚,終於,這一天來到!
斷腸崖邊,佳人芳蹤影未現,過兒萬念俱灰,縱身跳下懸崖…
幸虧懸崖下面是深淵,楊過並無死,被水衝到了岸邊的楊過甦醒過來後,看到了不少小蜜蜂,他一眼就認出了這是小龍女樣的蜜蜂,莫非龍兒就在附近?最 後在深潭水下,楊過找到了本身苦苦等待了十六年的摯愛。原來小龍女得知本身無藥可救,也縱身跳下斷腸崖,十六年之期只不過是爲了讓楊過不要輕生。可是跳崖 後的小龍女並無死掉,接着就在谷底一個世外桃源的地方慢慢的療傷,居然徹底康復了。真是有情人終成眷屬,有情人終成名人。
定義:
接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,所以 這些方法能夠在不一樣的地方被不一樣的類實現,而這些實現能夠具備不一樣的行爲(功能)。
接口是對抽象的抽象。
接口就是標準,就是承諾。
針對接口編程,不要針對具體編程是依賴倒轉原則的另一種表述。
針對接口編程又稱爲面向接口編程,針對接口編程就是要先設計一系列的接口,把設計和實現分離開,使用時只需引用接口便可,也因爲系統各部分的解耦合。以下圖所示:
故事分析:
「十六年後 在此重會;夫妻情深 勿失信約」就是針對接口編程的一個絕妙的例子。並且最後還加了「信約」一次。言外之意就是說咱們說好了要十六年在此地重逢,咱們倆都要遵守此約定。根據上 面的故事,小龍女和楊過制定好接口後,就縱身跳下了懸崖,無論本身的過兒了,由於她此時已經不用關心過兒怎麼去再十六年後河本身相見,只要十六年後在此地 相見便可,也就是說小龍女針對和使用都是接口,至於楊過怎麼實現,她此時已經身患絕症而沒法顧及了。而楊過看過此約定後,雖然無奈,但也只好照辦。具體實 現以下:回去吃斷腸草調理本身,而後以神鵰爲伴練習武功,知道練成了黯然銷魂掌而神功大成,而後就是在江湖上作俠義之事,而後就是按照信約與十六年後來 到斷腸崖邊;而小龍女就在谷底慢慢的調養,十六年後身體早已康復,並且愈加迷人了。當楊過沒有見到小龍女時縱身跳崖,遵守了「問世間情爲什麼物,直教人生死相許」標準。
總結一下:小龍女和楊過定下接口,而後各自針對接口各自獨立的作事,最終得以相見。
針對接口編程是將來提升程序的可維護性、可伸縮性和可複用性。若是你在一個類中直接使用另外的一個,這樣就把兩個類緊密的聯繫在了一塊兒,之後若是想作出改 變就很難了。若是針對接口編程,當業務變化時咱們只須要用一個新的類實現接口便可,而客戶端依舊可使用接口引用新的類的,同時也保證了客戶端的不變性。 這樣客戶端和實現端互不影響,保持了各自的相對獨立性。正如小龍女和楊過的,他們樹立了十六年制約後,就不用關心彼此的如何去赴這場約定,只須要按照約定 作事就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的泛形技術。有興趣的讀者能夠去學習巴巴運動網的源代碼。
舒適提示:
許下的承諾就是欠下的債。因此不要輕易作出承諾。
楊過和小龍女爲了承諾而付出了十六年的努力。
在軟件設計和編碼中,若是確立了接口,也就對客戶作出了承諾,這種承諾幾乎沒有改變的機會,時間越長越是如此,由於那是別人對你接口的使用已經遍及世界各地,固然前提是你的藉口很出色,這樣才能取得不少人的信賴和消費。
不要輕易說:「我愛你「,由於這是一輩子的承諾。
注意:該文檔參考和使用了網絡上的免費開放的圖片和內容,並以避免費開放的方式發佈,但願爲移動互聯網和智能手機時代貢獻綿薄之力!能夠隨意轉載,但不得使用該文檔謀利。