国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式面試

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式面試。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

C++ 面向?qū)ο笤O(shè)計(jì)
  • 封裝:隱藏內(nèi)部實(shí)現(xiàn)
  • 繼承:復(fù)用現(xiàn)有代碼
  • 多態(tài):改寫對象行為

設(shè)計(jì)模式關(guān)鍵在于分解和抽象;

設(shè)計(jì)模式的主要目的是易于變化

面向?qū)ο笤O(shè)計(jì)原則–比設(shè)計(jì)模式更加重要 違背了設(shè)計(jì)原則,設(shè)計(jì)模式是錯(cuò)誤的。

  • 依賴倒置原則(DIP)
  • 開放封閉原則(OCP)
  • 單一職責(zé)原則(SRP)
工廠方法模式
模式定義

工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構(gòu)造器(Virtual Constructor)模式或者多態(tài)工廠(Polymorphic Factory)模式,它屬于類創(chuàng)建型模式。在工廠方法模式中,工廠父類負(fù)責(zé)定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負(fù)責(zé)生成具體的產(chǎn)品對象,這樣做的目的是將產(chǎn)品類的實(shí)例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應(yīng)該實(shí)例化哪一個(gè)具體產(chǎn)品類。

模式結(jié)構(gòu)和時(shí)序圖
  • Product:抽象產(chǎn)品
  • ConcreteProduct:具體產(chǎn)品
  • Factory:抽象工廠
  • ConcreteFactory:具體工廠

模式結(jié)構(gòu):

設(shè)計(jì)模式面試,C++知識,設(shè)計(jì)模式,面試,java

工廠方法模式的優(yōu)點(diǎn)
  • 工廠無需關(guān)心細(xì)節(jié),甚至無序知道具體產(chǎn)品的類名稱。
  • 工廠角色和茶農(nóng)角色的多態(tài)性設(shè)計(jì)是工廠方法模式的關(guān)鍵。它能確定創(chuàng)建的產(chǎn)品對象;創(chuàng)建細(xì)節(jié)完全封裝在具體工廠內(nèi)部。所有的具體工廠類都具有同一抽象父類。
  • 添加新產(chǎn)品時(shí),只需要添加一個(gè)具體的工廠和具體產(chǎn)品就可以了,系統(tǒng)的擴(kuò)展性較好,完全符合”開閉原則”。
工廠模式的缺點(diǎn)
  • 添加新產(chǎn)品時(shí),需要編寫新的具體產(chǎn)品類,而且需要提供與之賭贏的工廠類,系統(tǒng)中類的個(gè)數(shù)將成對增加,會(huì)帶來額外的編譯開銷。
  • 由于考慮到系統(tǒng)的可擴(kuò)展性,需要引入抽象層,在客戶端代碼中均使用抽象層進(jìn)行定義,增加了系統(tǒng)的抽象性和理解難度,且在實(shí)現(xiàn)時(shí)可能需要用到DOM、反射等技術(shù),增加了系統(tǒng)的實(shí)現(xiàn)難度。
單例模式
模式定義

單例模式(Singleton Pattern):單例模式確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類稱為單例類,它提供全局訪問的方法。

單例模式的要點(diǎn)有三個(gè):一是某個(gè)類只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。單例模式是一種對象創(chuàng)建型模式。單例模式又名單件模式或單態(tài)模式。

模式分析

單例模式的目的是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。單例類擁有一個(gè)私有構(gòu)造函數(shù),確保用戶無法通過new關(guān)鍵字直接實(shí)例化它。除此之外,該模式中包含一個(gè)靜態(tài)私有成員變量與靜態(tài)公有的工廠方法,該工廠方法負(fù)責(zé)檢驗(yàn)實(shí)例的存在性并實(shí)例化自己,然后存儲(chǔ)在靜態(tài)成員變量中,以確保只有一個(gè)實(shí)例被創(chuàng)建。

在單例模式的實(shí)現(xiàn)過程中,需要注意如下三點(diǎn):

  • 單例類的構(gòu)造函數(shù)為私有;
  • 提供一個(gè)自身的靜態(tài)私有成員變量;
  • 提供一個(gè)公有的靜態(tài)工廠方法。
優(yōu)點(diǎn)
  • 提供了對唯一實(shí)例的受控訪問。
  • 允許可變數(shù)目的實(shí)例。
缺點(diǎn)
  • 由于單例模式中沒有抽象層,因此單例類的擴(kuò)展有很大的困難。
  • 單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。
適用環(huán)境
  • 系統(tǒng)只需要一個(gè)實(shí)例對象,如系統(tǒng)要求提供一個(gè)唯一的序列號生成器,或者需要考慮資源消耗太大而只允許創(chuàng)建一個(gè)對象。
觀察者模式

上述模式中,需要使用明顯的調(diào)用函數(shù),來進(jìn)行兩個(gè)對象之間的通信,但是能否建立一種關(guān)系,使得一個(gè)對象發(fā)生改變時(shí),自動(dòng)通知其它對象,做出反映。這種模式就是觀察者模式

模式定義

觀察者模式(Observer Pattern):定義對象間的一種一對多依賴關(guān)系,使得每當(dāng)一個(gè)對象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對象皆得到通知并被自動(dòng)更新。觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式。

觀察者模式是一種對象行為型模式。

模式結(jié)構(gòu)

觀察者模式包含如下角色:

  • Subject: 目標(biāo)主題:跟蹤所有觀察者,并提供添加和刪除觀察者的接口。
  • ConcreteSubject: 具體目標(biāo);將有關(guān)狀態(tài)存入各 ConcreteObserver 對象。當(dāng)具體主題的狀態(tài)發(fā)生任何更改時(shí),通知所有觀察者。
  • Observer: 觀察者:為所有的具體觀察者定義一個(gè)接口,在得到主題的通知時(shí)進(jìn)行自我更新。
  • ConcreteObserver: 具體觀察者;實(shí)現(xiàn) Observer 所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài)相協(xié)調(diào)。

類圖如下:

設(shè)計(jì)模式面試,C++知識,設(shè)計(jì)模式,面試,java

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 觀察者和被觀察者是抽象耦合的

缺點(diǎn):

  • 如果一個(gè)被觀察者對象有很多的直接和間接的觀察者,將所有的觀察者都通知到會(huì)花費(fèi)很多時(shí)間。
  • 如果在觀察者和觀察目標(biāo)之間有循環(huán)依賴的話,觀察目標(biāo)會(huì)觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,可能導(dǎo)致系統(tǒng)崩潰。
適用情況
  • 一個(gè)對象必須通知其他對象,而并不知道這些對象是誰。
代理模式
模式定義

代理模式(Proxy Pattern) :給某一個(gè)對象提供一個(gè)代 理,并由代理對象控制對原對象的引用。代理模式的英文叫做Proxy或Surrogate,它是一種對象結(jié)構(gòu)型模式。

模式結(jié)構(gòu)

代理模式包含角色如下:

  • Subject:抽象主題角色;聲明了 RealSubject 與 Proxy 的共同接口,定義了某個(gè)/些功能。
  • RealSubject(真實(shí)主題):通常執(zhí)行具體的業(yè)務(wù)邏輯,Proxy 控制對它的訪問。
  • Proxy:持有一個(gè) RealSubject 引用(指針),可以在需要時(shí)將請求轉(zhuǎn)發(fā)給 RealSubject,以此起到代理的作用。
  • Client(客戶端):通過 Proxy 間接地與 RealSubject 進(jìn)行交互。

注意: Proxy 和 RealSubject 都實(shí)現(xiàn)了 Subject 的接口,這允許 Client 可以像處理 RealSubject 一樣處理 Proxy。

設(shè)計(jì)模式面試,C++知識,設(shè)計(jì)模式,面試,java

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 代理模式能將代理對象與真正被調(diào)用的對象分離,在一定程度上降低了系統(tǒng)的耦合度。
  • 在客戶端和目標(biāo)對象之間,代理起到一個(gè)中介作用,這樣可以保護(hù)目標(biāo)對象。在對目標(biāo)對象調(diào)用之前,代理對象也可以進(jìn)行其他操作。

缺點(diǎn):

  • 這種模式引入了另一個(gè)抽象層,這有時(shí)可能是一個(gè)問題。如果真實(shí)主題被某些客戶端直接訪問,并且其中一些客戶端可能訪問代理類,這可能會(huì)導(dǎo)致不同的行為。
  • 由于在客戶端和真實(shí)主題之間增加了代理對象,因此有些類型的代理模式可能會(huì)造成請求的處理速度變慢。
  • 實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。
適用場景
  • 遠(yuǎn)程代理(Remote Proxy):為一個(gè)位于不同地址空間的對象提供一個(gè)本地代理,對代理的方法調(diào)用會(huì)導(dǎo)致對遠(yuǎn)程對象的方法調(diào)用。ATM 就是一個(gè)例子,ATM 可能會(huì)持有(存在于遠(yuǎn)程服務(wù)器中的)銀行信息的一個(gè)代理對象。
  • 虛擬代理(Virtual Proxy):使用虛擬代理,代理可以作為一個(gè)(資源消耗較大的)對象的代表。虛擬代理經(jīng)常延遲對象的創(chuàng)建,直到需要為止。在創(chuàng)建對象之前(及創(chuàng)建對象過程中),虛擬代理也可以作為對象的代理;之后,代理將請求直接委托給 RealSubject。
  • 保護(hù)代理(Protection Proxy):根據(jù)訪問權(quán)限,可以使用保護(hù)代理來控制對資源的訪問。
裝飾模式

對于類或者對象的行為增加,一般有兩種方式:

  • 繼承機(jī)制:使用繼承機(jī)制,直接進(jìn)行函數(shù)的添加。
  • 關(guān)聯(lián)機(jī)制,即將一個(gè)類的對象嵌入另外一個(gè)對象中,由另外一個(gè)對象來決定是否調(diào)用嵌入對象的行為,以便擴(kuò)展自己的行為。,我們稱這個(gè)嵌入的對象為“裝飾器”。
模式定義:

裝飾模式(Decorator Pattern) :動(dòng)態(tài)地給一個(gè)對象增加一些額外的職責(zé)(Responsibility),就增加對象功能來說,裝飾模式比生成子類實(shí)現(xiàn)更為靈活。其別名也可以稱為包裝器(Wrapper),與適配器模式的別名相同,但它們適用于不同的場合。根據(jù)翻譯的不同,裝飾模式也有人稱之為“油漆工模式”,它是一種對象結(jié)構(gòu)型模式。

模式結(jié)構(gòu)

包含角色如下:

  • Component: 抽象構(gòu)件
  • ConcreteComponent: 具體構(gòu)件
  • Decorator: 抽象裝飾類
  • ConcreteDecorator: 具體裝飾類

設(shè)計(jì)模式面試,C++知識,設(shè)計(jì)模式,面試,java

裝飾模式中的裝飾類一般擁有為抽象構(gòu)建成員,通過具體構(gòu)建類來進(jìn)行添加操作,成為具體的裝飾類,最終實(shí)現(xiàn)具體的類操作的擴(kuò)展,裝飾器一般也來自于基礎(chǔ)的抽象構(gòu)件

優(yōu)點(diǎn)
  • 裝飾模式提供比繼承更多的靈活度
缺點(diǎn)
  • 使用裝飾模式時(shí),因?yàn)閷訉舆f進(jìn)關(guān)系,會(huì)產(chǎn)生很多無用的小對象;和具體的裝飾類。
適配器模式

適配器模式(Adapter Pattern) :將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對象結(jié)構(gòu)型模式。

適配器模式(Adapter Pattern)是一種補(bǔ)救模式,將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,從而使原本由于接口不兼容而不能一起工作的類可以一起工作。

1.3 模式結(jié)構(gòu)

適配器模式包含如下角色:

  • Target:目標(biāo)抽象類
  • Adapter:適配器類
  • Adaptee:適配者類
  • Client:客戶類

適配器模式有對象適配器和類適配器兩種實(shí)現(xiàn):

對象適配器:

設(shè)計(jì)模式面試,C++知識,設(shè)計(jì)模式,面試,java

優(yōu)點(diǎn)
  • 將目標(biāo)類和適配者類解耦,通過引入一個(gè)適配器類來重用現(xiàn)有的適配者類,而無須修改原有代碼。
  • 增加了類的透明性和復(fù)用性。

對象適配器模式還具有如下優(yōu)點(diǎn): 一個(gè)對象適配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說,同一個(gè)適配器可以把適配者類和它的子類都適配到目標(biāo)接口。文章來源地址http://www.zghlxwxcb.cn/news/detail-782719.html

缺點(diǎn)
  • 對象適配器:
    -mWsqMa1A-1704852256417)]
優(yōu)點(diǎn)
  • 將目標(biāo)類和適配者類解耦,通過引入一個(gè)適配器類來重用現(xiàn)有的適配者類,而無須修改原有代碼。
  • 增加了類的透明性和復(fù)用性。

對象適配器模式還具有如下優(yōu)點(diǎn): 一個(gè)對象適配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說,同一個(gè)適配器可以把適配者類和它的子類都適配到目標(biāo)接口。

缺點(diǎn)
  • 對象適配器:
    • 與類適配器模式相比,要想置換適配者類的方法就不容易。如果一定要置換掉適配者類的一個(gè)或多個(gè)方法,就只好先做一個(gè)適配者類的子類,將適配者類的方法置換掉,然后再把適配者類的子類當(dāng)做真正的適配者進(jìn)行適配,實(shí)現(xiàn)過程較為復(fù)雜。

到了這里,關(guān)于設(shè)計(jì)模式面試的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java筆記+踩坑匯總】Java基礎(chǔ)+進(jìn)階+JavaWeb+SSM+SpringBoot+瑞吉外賣+SpringCloud+黑馬旅游+谷粒商城+學(xué)成在線+MySQL高級篇+設(shè)計(jì)模式+面試題匯總+源碼

    本文是“Java學(xué)習(xí)路線”專欄的導(dǎo)航文章,目標(biāo)是為Java工程師提供一套 完整的Java學(xué)習(xí)路線 。 目錄 0.摘要/資料/代碼整理 1.Java基礎(chǔ)+進(jìn)階 2.MySQL,JavaWeb,Mybatis,前端 3.Git 4.SSM(Spring,SpringMVC,Mybatis)框架 5.Maven高級 6.Springboot,MybatisPlus,JPA框架 7.瑞吉外賣、Redis、Nginx、Linux、mysql主從復(fù)制

    2024年02月16日
    瀏覽(1340)
  • 面試設(shè)計(jì)模式-責(zé)任鏈模式

    面試設(shè)計(jì)模式-責(zé)任鏈模式

    在進(jìn)行請假申請,財(cái)務(wù)報(bào)銷申請,需要走部門領(lǐng)導(dǎo)審批,技術(shù)總監(jiān)審批,大領(lǐng)導(dǎo)審批等判斷環(huán)節(jié)。存在請求方和接收方耦合性太強(qiáng),代碼會(huì)比較臃腫,不利于擴(kuò)展和維護(hù)。 針對上面,使用責(zé)任鏈模式,將請求方和接收方的業(yè)務(wù)進(jìn)行解耦, 客戶端發(fā)送一個(gè)請求,由一個(gè)抽象的

    2024年02月09日
    瀏覽(23)
  • java初中級面試題(SSM+Mysql+微服務(wù)(SpringCloud+Dubbo)+消息隊(duì)列(RocketMQ)+緩存(Redis+MongoDB)+設(shè)計(jì)模式+搜索引擎(ES)+JVM

    目錄 基礎(chǔ)篇 一、Get 和 Post 的區(qū)別 二、Java 多態(tài)的具體體現(xiàn) 三、StringBuffer StringBuilder String 區(qū)別 四、==和 equals 區(qū)別 五、重寫 equals 需要重寫 hashCode 嗎 六、java 的基本數(shù)據(jù)類型 七、List, Set, Collection, Collections ? 八、ArrayList 和 LinedList 區(qū)別 九、HashMap 和 Hashtable 區(qū)別 十、Forward

    2023年04月20日
    瀏覽(53)
  • 設(shè)計(jì)模式面試

    設(shè)計(jì)模式面試

    C++ 面向?qū)ο笤O(shè)計(jì) 封裝:隱藏內(nèi)部實(shí)現(xiàn) 繼承:復(fù)用現(xiàn)有代碼 多態(tài):改寫對象行為 設(shè)計(jì)模式關(guān)鍵在于分解和抽象; 設(shè)計(jì)模式的主要目的是 易于變化 面向?qū)ο笤O(shè)計(jì)原則–比設(shè)計(jì)模式更加重要 違背了設(shè)計(jì)原則,設(shè)計(jì)模式是錯(cuò)誤的。 依賴倒置原則(DIP) 開放封閉原則(OCP) 單一職責(zé)原

    2024年02月02日
    瀏覽(18)
  • 設(shè)計(jì)模式-面試題

    模板方法模式、工廠方法模式、外觀模式、建造者模式 代理模式、單例模式、觀察者模式 設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被理解、提高代碼的可靠性。 創(chuàng)建型:主要用于創(chuàng)建對象,包括各種

    2024年02月21日
    瀏覽(19)
  • 設(shè)計(jì)模式-面試常問

    1.單例模式 保證系統(tǒng)中,一個(gè)類,只有一個(gè)實(shí)例,并且提供對外訪問。 優(yōu)點(diǎn):只有一個(gè)對象,可以節(jié)省資源。適合頻繁創(chuàng)建銷毀對象的場景。 實(shí)現(xiàn):要用到static,靜態(tài)私有對象。暴露單例的靜態(tài)方法。 (1)餓漢模式:對象放在類成員變量中,類加載時(shí),就可以初始化實(shí)例。

    2024年02月12日
    瀏覽(24)
  • 設(shè)計(jì)模式面試題(七)

    模板方法模式是一種行為設(shè)計(jì)模式,它在一個(gè)方法中定義一個(gè)算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟。 以下是一些使用模板方法模式的常見情況: 固定的算法框架,但有可變的具體步驟:

    2024年04月12日
    瀏覽(21)
  • 設(shè)計(jì)模式面試系列-02

    1、工廠模式是最常用的實(shí)例化對象模式,是用工廠方法代替new操作的一種模式。 2、利用工廠模式可以降低程序的耦合性,為后期的維護(hù)修改提供了很大的便利。 3、將選擇實(shí)現(xiàn)類、創(chuàng)建對象統(tǒng)一管理和控制,從而將調(diào)用者跟我們的實(shí)現(xiàn)類解耦。 Spring IOC 看過Spring源碼就知道

    2024年02月20日
    瀏覽(15)
  • 【面試題】如何理解 前端設(shè)計(jì)模式-測策略模式?

    前端面試題庫 ( 面試必備) ?? ? ? ? ? ? 推薦:★★★★★ 地址:前端面試題庫 【國慶頭像】- 國慶愛國 程序員頭像!總有一款適合你! 策略(Strategy)模式的定義:該模式定義了一 系列算法 ,并將每個(gè)算法封裝起來,使他們可以相互替換,且算法的變化不會(huì)影響使用

    2024年02月07日
    瀏覽(27)
  • 【前端知識】JavaScript——設(shè)計(jì)模式(工廠模式、構(gòu)造函數(shù)模式、原型模式)

    工廠模式是一種眾所周知的設(shè)計(jì)模式,廣泛應(yīng)用于軟件工程領(lǐng)域,用于抽象創(chuàng)建特定對象的過程。 優(yōu)點(diǎn):可以解決創(chuàng)建多個(gè)類似對象的問題 缺點(diǎn):沒有解決對象標(biāo)識問題(即新創(chuàng)建的對象是什么類型) 示例: 構(gòu)造函數(shù)模式與工廠模式相比,沒有顯式地創(chuàng)建對象,其屬性和方

    2024年02月15日
    瀏覽(54)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包