<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 一、何為抽象? 提到抽象,你會想到什么?是這些嗎? 1. 抽象是面向對象的基礎,有了抽象才會有面向對象的三大特征:繼承,封裝,多態。 1. 層與層聯系要依賴抽象,上層依賴抽象,下層也要依賴抽象。 1. 總之一句話,編程就是要依賴抽象。 等等這類的話,我們朗朗上口。那么回頭再來看這些,它到底是什么? 它不是抽象,它是抽象的一些體現,也就是說這都是抽象后的結果,抽象的優點好處。作為程序員的我們要的就是抽象帶來的這些結果,但是我們更重要的一個任務是,如何做出“抽象”?把抽象敲出來,有代碼來體現。對于程序員來說,只有將想法落實到代碼上才是編程,是有質量的編程。 ## 二、為什么抽象 **那么何為抽象?** 1. 有相同就抽象 1. 不同領域要聯系需要抽象 **為什么要抽象?** **抽象的最直接目的:為了變化,方便交流**。 這兩個問題往往是分不開的,沒有目的的抽象就是無意義的工作。所以在這里一塊說說我的看法。 先說第一點:有相同就抽象。遇到幾個類有相同的特性:方法也好,屬性也好,就可以去使用抽象了。 1、變動少。凡是這種整體的修改,如果有抽象的父類,只要在父類中修改,子類繼承即可。省去該多處的麻煩,最怕的是沒有改完。 2、接口統一,多種選擇。有抽象,就意味著子類可以有多種實現;多態在這個時候就是最完美的詮釋了抽象的神奇。對外是統一的,但是卻可以選擇不同的“子類”,達到不同的效果。 3、擴展是極方便的。當前存在的類的實現不能滿足我的需要,我只需要增加一個繼承抽象的子類,定義需要的新實現就可以達到目的,與“開閉原則”吻合。 其次是:不同領域要聯系需要抽象——解耦緊密相鄰的關系 在普通的不過的是,不管什么牌子的USB數據線,都可以接通任何牌子的電腦的USB接口。 這里的接口就是抽象出來的一套規范,只要不同的“領域”把要接觸的“接口”規定好,就可以按照這個接口的約定去進行各種實現了。在編程中更是,為了編碼變得簡單,為了系統系能好,為了合作開發,一個系統被分成了“N”層,分層的目的,是為了解耦,要直接聯系的兩個類通過一組約定,有直接聯系編程間接聯系。在遵守約定的情況下,進行各自的開發。互不影響。 如果沒有接口,直接發生關系就會這樣: 1、每走一條線,都需要從頭走到尾;如果一處做不好,就無法運行; 2、一處方法發生變動,特別是底層方法,調用這個方法的所有的類都需要變動。 3、需求變動,要求更換以前類的執行過程,好比商場打折,有多種選擇的情況下,只能增加類,在需要的時候,臨時更改調用那個,對于發布的系統,這可不能算一種解決方案。 (這里的領域,你可以理解成層。層的概念也是可大可小,沒有嚴格限制,有代碼經驗的人根據經驗來劃分自己的層) 從抽象的由來就可以看出,抽象出現就是為了“交流”。如果說這個類在系統中永遠只是這樣,不會擴展,不會被傳承,不會發生變化,那么就沒有抽象的必要了,因為它是“唯一的”。?不變化,交流不影響,要變化,還要交流就必須抽象。 ## 三、抽象的體現形式 **1抽象成基類** 大家熟知的形式。將相似的幾個類中可以抽象的成員拿出來,形成他們的基類。 基類也可分為抽象類和接口,抽象類和接口的區別在于:基類是對屬性和方法的抽象,側重是對“代碼重復”的解決;接口是對方法的抽象,避免“方法重復”。 2、**合并同類項,不增加父類。** 這種方式,是最近學習設計模式的時候突然的理解。在工廠模式到抽象工廠模式改造的過程就是這樣。大家看分析。 工廠模式:只建立一個產品:Button。類圖如下: ![](https://box.kancloud.cn/2016-02-18_56c5ce7553fb9.jpg) 建立另一個產品:Text。類圖如下: ![](https://box.kancloud.cn/2016-02-18_56c5ce7570e5e.jpg) 觀察兩個類圖,一模一樣的工廠模式,一次卻只能實現一個產品,要是實現兩個產品,就需要把兩個圖結合起來,那就成“大物”了。讓咱們來合并同類相吧。 1、兩個Factory,合并,方法+1;兩個UnixFactroy,合并,但是方法+1;兩個WindowFactory,合并,方法+1。之所以可以合并時因為他們本質一樣。 2、但是具體的Button,text抽象類和具體的實現類可不能合并了,他們本質不一樣。 ?看合并的結果: ![](https://box.kancloud.cn/2016-02-18_56c5ce759f90a.jpg) **不增加父類,增加第三者。** 這是最簡單的一種抽象,也是常用的一種,估計有些人沒把它當成抽象。 把多個類中用到的相同方法拿出,作為公共方法,放到第三個類中。這是我們經常用到的,和其他類不建立繼承或實現關系,需要的時候就引用。當然在某種情況下,這個第三個類可能被抽象成接口來對待,具體的不做討論,情況太多,具體對待。 ## 總結: 抽象來源于個體,多了才抽象。 現有的子類,抽象后,才有的基類。 分析設計模式的時候,從簡單入手,畫著畫著,就有了父類,有了繼承,明白的抽象的存在;寫代碼也是,先寫,寫著寫著就有了抽象類,有了接口。 以上就是這些天對抽象的思考。歡迎大家指正。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看