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

建立另一個產品:Text。類圖如下:

觀察兩個類圖,一模一樣的工廠模式,一次卻只能實現一個產品,要是實現兩個產品,就需要把兩個圖結合起來,那就成“大物”了。讓咱們來合并同類相吧。
1、兩個Factory,合并,方法+1;兩個UnixFactroy,合并,但是方法+1;兩個WindowFactory,合并,方法+1。之所以可以合并時因為他們本質一樣。
2、但是具體的Button,text抽象類和具體的實現類可不能合并了,他們本質不一樣。
?看合并的結果:

**不增加父類,增加第三者。**
這是最簡單的一種抽象,也是常用的一種,估計有些人沒把它當成抽象。
把多個類中用到的相同方法拿出,作為公共方法,放到第三個類中。這是我們經常用到的,和其他類不建立繼承或實現關系,需要的時候就引用。當然在某種情況下,這個第三個類可能被抽象成接口來對待,具體的不做討論,情況太多,具體對待。
## 總結:
抽象來源于個體,多了才抽象。
現有的子類,抽象后,才有的基類。
分析設計模式的時候,從簡單入手,畫著畫著,就有了父類,有了繼承,明白的抽象的存在;寫代碼也是,先寫,寫著寫著就有了抽象類,有了接口。
以上就是這些天對抽象的思考。歡迎大家指正。
- 前言
- 抽象工廠——創建型設計模式一
- 工廠三姐妹——創建型設計模式之二
- 初識面向對象設計模式
- 建造者模式——創建型模式之三
- 原型模式——創建型設計模式四
- 適配器 and 組合模式——結構性模式之一
- 橋接模式——結構性設計模式之二
- 組合模式——結構型設計模式之三
- 裝飾模式——結構型設計模式之四
- 外觀模式——結構型設計模式之五
- 代理模式——結構型設計模式之六
- 觀察者模式——行為型設計模式之五
- 模板設計——行為設計模式之一
- 命令模式——行為設計模式之二
- 狀態模式——行為型設計模式之三
- 職責模式——行為設計模式之四
- 中介模式——行為模式之六
- 策略+簡單工廠 實戰篇
- 看觀察者怎么全方位觀察機房收費系統
- 登陸也需要裝飾——機房收費系統裝飾模式實戰
- 何為抽象?你有本末倒置嗎?
- 再回首,策略、簡單工廠是否依然?
- 再回首——行為型設計模式