怎么并線(三條電線怎么并線)
675
2022-05-29
“世界處處不設計”
有物混成,先天地生。寂兮寥兮,獨立而不改,周行而不殆,可以為天地母。吾不知其名,字之曰道,強為之名曰大。大曰逝,逝曰遠,遠曰反。
道是什么?道可道,非常道。道不明,說不盡的才算是道,它是自然法則的終極抽象。但至少在某一方面,它是各種事物如何組織在一起以及進行溝通互動的原始規律。而在軟件設計中,各個模塊之間怎樣組織通信成為一個優雅健壯的整體,以便保證良好的可重用性和擴展性,這對于設計人員至關重要,于是有人將這些組裝模式總結了出來,成為一種道,設計模式之道。
首先我們得搞清楚點面向對象的概念,面向對象其實是對現實世界的理解和抽象的方法,也就是在計算機世界里去模擬現實世界的一種編程方法,具體是利用封裝、繼承、多態的方法去建立模型,我們一個個看下這都是些什么鬼。
01
—
封裝
恩?這是……麥當勞?對,但重點在于那杯可樂,是被蓋子給封起來的,只留了一個孔可以插吸管才能喝。這其實就是封裝,封裝隱藏了內部的可樂,對外留有一個接口來訪問,這樣有啥好處?干凈!防止外部隨便訪問,比如灰塵落入弄臟內部數據。對外暴露的習慣是非常容易使用的,你根本無需關心內部實現細節,你喝個可樂還在乎氣壓怎么增大減小導致可樂杯吸出來?非常簡單,一個字:“吸”!
02
—
繼承
DNA?生物一代代的延續下來是靠什么保持其父輩的特征?遺傳基因,正所謂龍生龍鳳生鳳,老鼠兒子會打洞,沒有這個機制那代碼量會急劇上升,很多功能,資源都是重復的在定義,這樣造成極大的冗余和浪費!所以就有了繼承機制,兒子從父親那繼承下來一些東西,不需要自己再去拼搏了,比如富二代繼承家產,再比如天生好嗓子,媽媽是王菲。當然,只是單單繼承是沒有意義的,否則不如直接用父類了,所以得有自己的特色,比如增加屬性啊,重寫方法之類。
03
—
多態
看清楚哈,是多態不是變態。沒有繼承就沒有多態,這個多態其實跟上面的繼承是有關系的。中華美食博大精深,菜品眾多,色香味俱全,形態各異,但是萬變不離其宗,他們都是食品,也就是說,他們都繼承自食品類,食材都是來自自然界生長出來的有機生物。這不就是繼承么?等等我還沒說完,多態其實是很巧妙地利用了繼承這個特性實現了另一種機制。我們人類可以吃塑料么?顯而易見不能,因為我們的接口只接收上面的天然有機食品類,對于鐵啊什么的金屬無機物是不能消化的。所以說,我們人類只接受食品類的多態,比如肉,蛋,蔬菜,水果,而決不能是塑料。來看一個多態的具體例子。
這些是早期的一些個人電腦,看起來它們是該進博物館了,順便懷念下神作的喬幫主。我們發現,越是古老的電腦越是高度集成,某天顯示器壞掉了我們會發現麻煩來了,我們只能去送修,然后把整個殼子拆開進行更換,也許它是焊接在主板上的那就慘了,模塊間的過度依賴造成了極大的耦合度,而更糟的是這種顯示器已經停產了根本買不到新的來匹配,那只能扔掉了。
為了解決這個問題設計人員提出了模塊化的概念,各種設備如雨后春筍般涌現。如:鼠標,鍵盤,攝像頭,打印機,存儲設備……但又有一個問題,每種設備都有一種接口,那電腦主機上得有多少種接口???這不坑爹么?于是出現了接口標準化。
在各種接口百花齊放的時候,有一種接口勝出了,它就是USB。它提供了一種接口標準,電壓5V,雙工數據傳輸,?供電……?最重要的是物理上形狀是不一樣的,所以別亂插、別亂捅。
于是乎,我們可以把電腦的模型設計成這樣:
話說有一個Computer類,一個USB接口,還有各種USB設備,故事就這樣開始了。
Computer:“我上面裝有一個USB接口,我只認識這個接口傳遞過來的數據,誰要跟我溝通你就去找它吧?!?/p>
USB:“要接駁我的設備是什么我不關心,但我規定設備必須有readData()這個方法,但是怎么實現我不管,總之你得通過這個方法把數據給我?!?/p>
Keyboard:“我有readData()這個方法,我已經實現好了,用戶一敲鍵盤我就讀過來傳給你。 O(∩_∩)O?!?/p>
Mouse&Camera:“我也是,我也是,我要插!”
USB:“確實多態,夠變態?!?/p>
該分的分,該合的合,合合分分,分分合合,此乃陰陽之道。
04
—
實戰,實戰!
早期的槍設計非常原始簡陋,打一發子 彈要很長時間去準備,裝填時要先把火藥倒入槍 管內,然后裝入鉛 彈,最后用棍子戳實后才能發射。?射擊時士兵扣動扳機沖擊火藥爆炸,子 彈被沖擊出去射殺敵方,然后再循環往復進行裝填這一過程,費時費力,所以我們能看到19世紀戰場上的士兵方陣前后排輪換射擊,后排的士兵實際上在裝填彈 藥以節省時間。
為了解決這個問題,我們開始思考了,既然彈 藥裝填困難,那么不如把彈丸和火藥組合起來,然后封裝在彈殼里,只要撞擊底火彈頭就會被爆炸的火藥崩出去,這樣直接裝入槍膛一觸即發,殺人方便多了,這個就是“封裝”。
那么問題又來了,雖然封裝彈 藥節省了很多時間,但一次打一發子 彈還是很麻煩不是?那就在子 彈之上再包裝一層彈夾吧,這相當于壓棧,最早壓入(push)的子 彈最后彈出(pop),先進后出(棧數據結構),這樣子 彈打完了只要換彈夾就好了??傊灰獦尳邮兆?彈就對了,我們都是子 彈的繼承。
然后設計師做了一件更喪心病狂的事情,他造了個外掛彈夾箱來實現彈夾接口的標準方法,背在身上不停地突突,多態發生了,冷 兵 器時代結束了,以上UML圖正描述了這種嗜殺如狂的瘋狂設計模式。
其他
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。