小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

設(shè)計模式區(qū)別(一)

 rookie 2012-08-19

最 近一段時間一直在學(xué)習(xí)設(shè)計模式,我有一個感受就是:接觸頭幾個設(shè)計模式時感覺似乎就那么一回事,好像沒有什么可學(xué)習(xí)的,因為理解起來很簡單,也很容易記 憶,在例子的帶動下似乎也有那么一點意思了,好像自己懂了。慢慢地,隨著學(xué)習(xí)的深入,接觸到了各種各樣的設(shè)計模式,前面那種輕松的勁兒就沒了,越學(xué)越迷 糊,感覺很多模式好像都是類似的,自己也分不清和前面學(xué)的模式的區(qū)別是什么了。再后來,經(jīng)過對這23種 基本的設(shè)計模式仔細(xì)研究,對比其實現(xiàn)類圖以及模式使用的目的,基本上清楚明白了各個設(shè)計模式之間的區(qū)別以及他們各自的使用范圍,為了使和我一樣在學(xué)習(xí)設(shè)計 模式的朋友少一些迷惑,我將我認(rèn)為的一些類似的、容易混淆的設(shè)計模式之間的區(qū)別總結(jié)出來共享給大家,希望能有所幫助,如有謬誤,歡迎指正。

在進(jìn)入正題之前,首先來了解一些基本的東西,有助于理解設(shè)計模式。

在面向?qū)ο缶幊讨?,理解對象、接口、類和繼承子類的概念對大多數(shù)人來說并不困難,問題關(guān)鍵在于如何運用它們寫出靈活的、可復(fù)用的軟件,而設(shè)計模式則可以告訴你如何去做。

面向?qū)ο笙到y(tǒng)中功能復(fù)用最常用的技術(shù)是類繼承對象組合。類繼承屬于白盒復(fù)用,也就是說通過生成子類來達(dá)到復(fù)用的目的,父類的內(nèi)部細(xì)節(jié)對子類可見;對象組合屬于黑盒復(fù)用,對象的內(nèi)部細(xì)節(jié)是不可見的,對象組合要求被組合的對象具有良好定義的接口。針對以上的復(fù)用技術(shù),我們需要遵守兩條原則:第一,針對接口編程,而不是針對實現(xiàn)編程;第二,優(yōu)先使用對象組合,而不是類繼承。

針對接口編程有兩個好處:第一個好處是客戶不需要知道他們使用的對象的特定類型 ,只須對象有客戶所期望的接口;第二個好處是客戶無須知道他們使用的對象是用什么類來實現(xiàn)的,他們只須知道定義的接口或者抽象類。這將極大的減少子系統(tǒng)實現(xiàn)之間的相互依賴關(guān)系。

優(yōu) 先使用對象組合的優(yōu)點是:第一,由于對象的實現(xiàn)是基于接口編寫的,所以在實現(xiàn)上存在較少的依賴關(guān)系,可以在運行時刻動態(tài)的替換引用的對象實現(xiàn);第二,優(yōu)先 使用對象組合有助于保持每個類背封裝,并被集中在單個任務(wù)上,這樣類和類的繼承層次會保持在較少的規(guī)模,并且不太可能增長為不可控制的龐然大物;第三,使 用對象組合可以最大限度的不用創(chuàng)建新的構(gòu)件,而使用已有的構(gòu)件就可以組裝獲得所需要的功能。

設(shè)計模式就采用了大量的對象復(fù)合技術(shù)。設(shè)計模式按照目的劃分,可以分為創(chuàng)建型、結(jié)構(gòu)型、行為型三種,其中創(chuàng)建型模式與對象的創(chuàng)建有關(guān),結(jié)構(gòu)型模式處理類或?qū)ο蟮慕M合;行為型模式對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述。

下面是各種模式按照目的劃分的分類

創(chuàng)建型模式:Factory Method、Abstract Factory、Builder、Prototype、  Singleton

構(gòu)造型模式:Adapter、Bridge、Composite、Decorator、Fa?ade、Flyweight、
Proxy

行為型模式:Chain of Responsibility、Command、Iterator、Mediator、Mementor、Memento、Observer、State、Stategy、Visitor、Template Method、
Interpreter

   

創(chuàng)建型模式之間的區(qū)別

GoF23種設(shè)計模式中創(chuàng)建型模式有5種,分別是:Singleton單件模式、Abstract Factory抽象工廠模式、Builder生成器模式、Factory Method工廠方法模式、Prototype原形模式。由于創(chuàng)建型模式與對象創(chuàng)建有關(guān),所以這幾種模式一般不會與其他的結(jié)構(gòu)型模式和行為型模式混淆,這里將創(chuàng)建型模式單獨列出來集中講解。下面分別總結(jié)這幾種設(shè)計模式。

 

設(shè)計模式

GoF的描述

優(yōu)點或缺點

Singleton單件模式

保證一個類僅有一個實例,并提供一個該實例全局的訪問點

可以保證唯一實例;允許在需要時擁有可變數(shù)目的實例

Abstract Factory抽象工廠模式

提供一個接口,讓該接口負(fù)責(zé)創(chuàng)建一系列相關(guān)或者相互依賴的對象,無需指定他們的具體類

分離了具體的類;可以生產(chǎn)一系列的相關(guān)對象,有利于產(chǎn)品的一致性;缺點是難以支持新種類的產(chǎn)品

Builder生成器模式

將一個復(fù)雜對象的構(gòu)建與其表示向分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示

可以使你改變一個產(chǎn)品的內(nèi)部表示;將構(gòu)造過程和表示分開;可以對構(gòu)造過程進(jìn)行更精細(xì)的控制

Factory Method工廠方法模式

定義一個用于創(chuàng)建對象的接口,讓子類決定實例化那個類。FactoryMethod使得一個類的實例化延遲到子類

為子類提供了掛鉤以提供對象的擴(kuò)展版本,也就是說子類可以覆蓋工廠方法改變創(chuàng)造的產(chǎn)品實例

Prototype原形模式

使用原型實例指定創(chuàng)建對象的種類,然后通過拷貝這些原型來創(chuàng)建新的對象

改變值獲得新的對象;可以在運行時刻指定要實例化的類,例如某個對象設(shè)置了若干屬性之后,我們需要N這種設(shè)置了相同屬性的對象,那么可以通過該模式,在動態(tài)運行時直接拷貝來生成

      

這里容易混淆的是Abstract Factory模式和Builder模式,Factory Method模式和Prototype模式也不好區(qū)分。Singleton模式?jīng)]什么太大的困難。下面就來分析一下前四種模式。

一、Abstract Factory模式和Builder模式:

Abstract Factory是應(yīng)對一系列對象的創(chuàng)建的問題,對于創(chuàng)建一個汽車對象來說,Abstract Factory模式更關(guān)注一系列的對象的創(chuàng)建,如:Wheel、EngineBody等等類型的創(chuàng)建, 這里的一系列可以這樣理解,寶馬汽車需要寶馬的Wheel,寶馬的Engine,寶馬的Body等等一系列配套的東西,而保時捷汽車則需要保時捷的Wheel,保時捷的Engine等等和保時捷配套的東西。大家注意這換句話說關(guān)注點在這一系列對象上,同時它關(guān)注創(chuàng)建對象得到的結(jié)果。

Builder則是將復(fù)雜對象的構(gòu)建過程與它的表示相分離,使得不同的表示可以使用同樣的構(gòu)建過程。這里我們要注意紅色的部分,即構(gòu)建過程與表示相分離,我們可以如此理解,也就是說將結(jié)果與對象創(chuàng)建過程進(jìn)行分離,這里關(guān)注點是過程。Builder模式注重的對象生產(chǎn)的過程,也就是如何一步一步將需要的對象構(gòu)建起來的,同樣對于一個汽車對象來舉例,我們需要首先創(chuàng)建Wheel,再創(chuàng)建Engine,再創(chuàng)建Body,然后將他們進(jìn)行組裝,得到想要的汽車對象,可以看到,Builder模式將構(gòu)建的組裝的過程進(jìn)行了隱藏和封裝。而Abstract Factory則只是一系列對象的工廠,組裝可能還是需要客戶自己來完成。

二、Factory Method模式和Prototype模式:

這兩個模式區(qū)別比較簡單,可以這樣理解,Factory Method模式是重新創(chuàng)建一個對象;Prototype模式是利用現(xiàn)有的對象進(jìn)行克隆,當(dāng)兩個對象或多個對象雷同的時候,可以考慮用一個已創(chuàng)建的對象去克隆出其余的對象。

Abstract Factory一般是利用Factory Method模式來完成一系列對象中的單個對象的創(chuàng)建。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多