浅读设计模式 - 1
前言-基本概念
-
設(shè)計(jì)模式并不使用獨(dú)特的語言特性,也不采用那些神奇的編程技巧。所有的模式均可以用標(biāo)準(zhǔn)的面向?qū)ο笳Z言實(shí)現(xiàn),這也許會(huì)多費(fèi)一些功夫,但是增加了軟件的靈活性和可復(fù)用性。
-
書中根據(jù)模式的性質(zhì)將模式劃分為三類:創(chuàng)建型(creational)、結(jié)構(gòu)型(structural)、行為型(behavioral)。 創(chuàng)建型模式與對(duì)象的創(chuàng)建有關(guān);結(jié)構(gòu)型模式處理類或?qū)ο蟮慕M合;行為型模式對(duì)類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述。
-
多態(tài):對(duì)象接口與其功能實(shí)現(xiàn)是分離的,不同對(duì)象可以對(duì)請(qǐng)求做不同的實(shí)現(xiàn),也就是說,兩個(gè)有相同接口的對(duì)象可以有完全不同的實(shí)現(xiàn)。
-
在面向?qū)ο笙到y(tǒng)中,接口是基本的組成部分,對(duì)象只有通過它們的接口才能與外部交流,如果不通過對(duì)象的接口就無法知道對(duì)象的任何事情,也無法請(qǐng)求對(duì)象做任何事情。
-
理解對(duì)象的類和類型(抽象、具體、混入)之間的差別非常重要:一個(gè)對(duì)象的類定義了對(duì)象是怎樣實(shí)現(xiàn)的,同時(shí)也定義了對(duì)象的內(nèi)部狀態(tài)和操作的實(shí)現(xiàn)。但是對(duì)象的類型只與它的接口有關(guān),接口即對(duì)象能響應(yīng)的請(qǐng)求的集合,一個(gè)對(duì)象可以有多個(gè)類型,不同類也可以有相同的類型。
-
所有從抽象類導(dǎo)出的類將共享該抽象類的接口,這時(shí),所有的子類都能相應(yīng)抽象類中的請(qǐng)求。只根據(jù)抽象類中定義的接口來操作對(duì)象有以下兩個(gè)好處: 1)客戶無須知道他們使用對(duì)象的特定類型,只須對(duì)象有客戶所期望的接口。 2)客戶無須知道他們使用的對(duì)象是用什么類來實(shí)現(xiàn)的,他們只須知道定義接口的抽象類。 這樣可以極大地減少系統(tǒng)實(shí)現(xiàn)之間的相互依賴,也產(chǎn)生了可復(fù)用的面相對(duì)象設(shè)計(jì)的如下原則: 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。
-
混入類是給其他類提供可選擇的接口或功能的類,它與抽象類一樣不能實(shí)例化,都是用于繼承的,抽象類和混入類都是對(duì)象的類型。
-
優(yōu)先使用對(duì)象組合,而不是類繼承。 因?yàn)楫?dāng)需要復(fù)用子類時(shí),實(shí)現(xiàn)上的依賴性就會(huì)產(chǎn)生一些問題。如果繼承下來的實(shí)現(xiàn)不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關(guān)系限制了靈活性并最終限制了復(fù)用性。優(yōu)先使用對(duì)象組合有助于保持每個(gè)類被封裝,并被集中在單個(gè)任務(wù)上;基于對(duì)象組合的設(shè)計(jì)有更多的對(duì)象(而有較少的類),且系統(tǒng)的行為將依賴于對(duì)象間的關(guān)系而不是被定義在某個(gè)類中。
-
委托(在一個(gè)對(duì)象中引用另一個(gè)對(duì)象,以此來完成請(qǐng)求)是對(duì)象組合的特例。它告訴你對(duì)象組合作為一個(gè)代碼復(fù)用機(jī)制可以替代繼承。
-
設(shè)計(jì)問題對(duì)框架設(shè)計(jì)而言最具重要性。(相比應(yīng)用和工具庫(kù))一個(gè)使用設(shè)計(jì)模式的框架比不使用設(shè)計(jì)模式的框架更可能獲得高層次的設(shè)計(jì)復(fù)用和代碼復(fù)用。成熟的框架通常使用了多種設(shè)計(jì)模式。了解設(shè)計(jì)模式的人能更快的洞悉框架。
轉(zhuǎn)載于:https://juejin.im/post/5b163f336fb9a01e4f47bb29
總結(jié)
以上是生活随笔為你收集整理的浅读设计模式 - 1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python面试总结
- 下一篇: 局域网物理机与虚拟机的互通访问