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

二十三種設(shè)計模式第二十四篇--訪問者模式(完結(jié)撒花)

這篇具有很好參考價值的文章主要介紹了二十三種設(shè)計模式第二十四篇--訪問者模式(完結(jié)撒花)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在訪問者模式(Visitor Pattern)中,我們使用了一個訪問者類,它改變了元素類的執(zhí)行算法。
通過這種方式,元素的執(zhí)行算法可以隨著訪問者改變而改變。
這種類型的設(shè)計模式屬于行為型模式。根據(jù)模式,元素對象已接受訪問者對象,這樣訪問者對象就可以處理元素對象上的操作。

訪問者模式的核心組成部分包括:

抽象元素(Element):定義了一個接受訪問者對象的方法,即accept()方法,用于調(diào)用訪問者的操作。

具體元素(Concrete Element):實現(xiàn)了抽象元素接口,并實現(xiàn)了accept()方法,根據(jù)元素對象的類型選擇相應(yīng)的操作。

抽象訪問者(Visitor):定義了訪問者對象的接口,包含了對不同元素對象進(jìn)行訪問的方法。

具體訪問者(Concrete Visitor):實現(xiàn)了抽象訪問者接口,具體定義了對不同元素對象的訪問操作。

訪問者模式的主要優(yōu)點包括:

增加新的操作非常方便:通過增加新的具體訪問者類,可以非常方便地增加新的操作或算法,而無需修改現(xiàn)有的元素類。

將有關(guān)的行為集中到一個訪問者中:通過將相似的操作集中到同一個訪問者中,可以使得代碼更加清晰、模塊化和可維護(hù)。

良好的擴(kuò)展性:在增加新的元素類時,只需要實現(xiàn)元素的接受訪問者方法和具體訪問者的相應(yīng)操作,不需要修改其他類。

缺點:

1、具體元素對訪問者公布細(xì)節(jié),違反了迪米特原則。
2、具體元素變更比較困難。
3、違反了依賴倒置原則,依賴了具體類,沒有依賴抽象。

二十三種設(shè)計模式第二十四篇--訪問者模式(完結(jié)撒花),# 設(shè)計模式,設(shè)計模式,訪問者模式

//5.對象結(jié)構(gòu)(Object Structure)角色:是一個包含元素角色的容器,提供讓訪問者對象遍歷容器中的所有元素的方法,
// 通常由 List、Set、Map 等聚合類實現(xiàn)。
public class Computer implements ComputerPart {
   //組合模式:也可以用迭代器替換
   ComputerPart[] parts;
 
   public Computer(){
      parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};      
   } 
 
 
   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i < parts.length; i++) {
         parts[i].accept(computerPartVisitor);
      }
      computerPartVisitor.visit(this);
   }
}

// 組合模式+訪問者模式
/*
 * 抽象元素(Element)角色: 聲明一個包含接受操作 accept() 的接口,被接受的訪問者對象作為 accept() 方法的參數(shù)。
 */
public interface ComputerPart {
   //要用  computerPartVisitor 對象來對當(dāng)前的元素進(jìn)行處理
   //ComputerPartVisitor是一個接口,有處理元素的方法.
   public void accept(ComputerPartVisitor computerPartVisitor);

}
//抽象訪問者(Visitor)角色:定義一個訪問具體元素的接口,
// 為每個具體元素類對應(yīng)一個訪問操作 visit() ,該操作中的參數(shù)類型標(biāo)識了被訪問的具體元素。
public interface ComputerPartVisitor {
   //訪問者 處理每個具體的元素。
   public void visit(Computer computer);
   public void visit(Mouse mouse);
   public void visit(Keyboard keyboard);
   public void visit(Monitor monitor);
}
//具體訪問者(ConcreteVisitor)角色:實現(xiàn)抽象訪問者角色中聲明的各個訪問操作,確定訪問者訪問一個元素時該做什么
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
 
   @Override
   public void visit(Computer computer) {
      //TODO:具體的處理。。。
      System.out.println("Displaying Computer.");
   }
 
   @Override
   public void visit(Mouse mouse) {
      //可以從mouse中取出具體對象的數(shù)據(jù),進(jìn)行相應(yīng)的處理了.
      System.out.println("Displaying Mouse.");
   }
 
   @Override
   public void visit(Keyboard keyboard) {
      System.out.println("Displaying Keyboard.");
   }
 
   @Override
   public void visit(Monitor monitor) {
      System.out.println("Displaying Monitor.");
   }
}
//4.具體元素(ConcreteElement)角色:實現(xiàn)抽象元素角色提供的 accept() 操作,其方法體通常都是 visitor.visit(this) ,另外具體元素中可能還包含本身業(yè)務(wù)邏輯的相關(guān)操作。
public class Keyboard  implements ComputerPart {
 
   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}
public class Monitor  implements ComputerPart {
 
   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}
//具體的元素類:包裝數(shù)據(jù)
public class Mouse  implements ComputerPart {
   //TODO:這里是每個類具體的數(shù)據(jù)

 
   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);  //處理功能分開, 包裝功能
   }
}
public class VisitorPatternDemo {
   public static void main(String[] args) {
 
      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}

行文至此,關(guān)于二十三篇設(shè)計模式終于算是完結(jié)了,可能以后的日子我會將這二十三篇博客進(jìn)行進(jìn)一步的細(xì)化和歸納總結(jié),也或許就這樣了,這個得看我將來是否繼續(xù)抽時候在此,或者是否在將來繼續(xù)從事這個行業(yè)了,有了一定的經(jīng)驗,那么我將繼續(xù)在此二十三篇設(shè)計模式上繼續(xù)拓展和填寫一些坑。
還是那句話,學(xué)無止境,編程這條路,一直學(xué)一直學(xué),但是必須得專攻一個方向?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-627292.html

到了這里,關(guān)于二十三種設(shè)計模式第二十四篇--訪問者模式(完結(jié)撒花)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 二十三種設(shè)計模式第十三篇--享元模式

    二十三種設(shè)計模式第十三篇--享元模式

    享元模式,主要就是一種池化方案,主要用于創(chuàng)建對象的數(shù)量,以減少內(nèi)存占用和提高性能。這種類型的設(shè)計模式屬于 結(jié)構(gòu)型模式 ,它提供了減少對象數(shù)量從而改善應(yīng)用所需的對象結(jié)構(gòu)的方式。 享元模式,嘗試重用現(xiàn)有的同類對象,如果未找到相同匹配的對象,那么就去創(chuàng)

    2024年02月12日
    瀏覽(17)
  • 二十三種設(shè)計模式第十九篇--命令模式

    二十三種設(shè)計模式第十九篇--命令模式

    命令模式是一種行為設(shè)計模式, 它將請求封裝成一個獨立的對象,從而允許您以參數(shù)化的方式將客戶端代碼與具體實現(xiàn)解耦 。在命令模式中, 命令對象充當(dāng)調(diào)用者和接收者之間的中介 。這使您能夠根據(jù)需要將請求排隊、記錄請求日志、撤銷操作等。 命令模式的核心組成部

    2024年02月14日
    瀏覽(26)
  • 二十三種設(shè)計模式第十八篇--責(zé)任鏈模式

    二十三種設(shè)計模式第十八篇--責(zé)任鏈模式

    責(zé)任鏈模式是一種行為型設(shè)計模式, 它允許你將請求沿著處理者鏈傳遞,直到有一個處理者能夠處理該請求為止。責(zé)任鏈模式將請求發(fā)送者和請求處理者解耦,從而使得多個處理者都有機(jī)會處理同一個請求。 該模式包含以下幾個關(guān)鍵角色: 抽象處理者(Handler):定義了一個

    2024年02月15日
    瀏覽(25)
  • 二十三種設(shè)計模式第十五篇--模版方法模式

    二十三種設(shè)計模式第十五篇--模版方法模式

    模板方法模式是一種行為型設(shè)計模式,它定義了一個算法的骨架,而將一些步驟延遲到子類中實現(xiàn)。通過使用這種模式,我們可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某些特定步驟。 模板方法模式的核心思想是將一個算法分解為一系列步驟,并將可變的部分封裝在

    2024年02月12日
    瀏覽(24)
  • 二十三種設(shè)計模式第十六篇--觀察者模式

    二十三種設(shè)計模式第十六篇--觀察者模式

    觀察者模式是一種行為型設(shè)計模式,它建立了一種對象間的一對多依賴關(guān)系,使得當(dāng)一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都會得到通知并自動更新。這種模式可以實現(xiàn)對象間的松耦合通信,提高系統(tǒng)的可擴(kuò)展性和靈活性。 觀察者模式的核心是兩個角色:主題(

    2024年02月12日
    瀏覽(30)
  • 【中級軟件設(shè)計師】—(針對上午題)二十三種設(shè)計模式(三十九)

    【中級軟件設(shè)計師】—(針對上午題)二十三種設(shè)計模式(三十九)

    簡單工廠模式代碼實現(xiàn)如下: ?? 意圖要背 工廠方法代碼實現(xiàn)如下: 抽象工廠模式代碼如下: 生成器模式代碼如下: 原型模式代碼實現(xiàn)如下: 單例模式代碼如下: 橋接模式代碼實現(xiàn)如下: 組合模式添加和刪除代碼實現(xiàn): 裝飾器模式代碼實現(xiàn): 外觀模式代碼實現(xiàn): 代理模

    2024年02月07日
    瀏覽(36)
  • 二十三種設(shè)計模式全面解析-抽象工廠模式:創(chuàng)造無限可能的工廠之道

    在軟件開發(fā)中,我們經(jīng)常面臨著創(chuàng)建一系列相關(guān)或相互依賴的對象的挑戰(zhàn)。在這個過程中,我們希望能夠靈活地創(chuàng)建對象,又不與具體的類耦合。那么有沒有一種設(shè)計模式可以幫助我們實現(xiàn)這一目標(biāo)呢?答案是肯定的!讓我?guī)氵M(jìn)入抽象工廠模式的世界,一起探索創(chuàng)造無限可

    2024年02月07日
    瀏覽(24)
  • 二十三種設(shè)計模式全面解析-原型模式進(jìn)階之原型管理器:集中管理對象原型的設(shè)計模式之道

    在軟件開發(fā)中,我們經(jīng)常需要創(chuàng)建和復(fù)制對象。然而,有時候直接創(chuàng)建對象可能會導(dǎo)致性能下降或代碼重復(fù)。為了解決這些問題,原型模式應(yīng)運而生。而使用原型管理器(Prototype Manager)來集中管理原型對象可以進(jìn)一步提高靈活性和可維護(hù)性。本文將詳細(xì)介紹原型管理器的用

    2024年02月07日
    瀏覽(22)
  • 二十三種設(shè)計模式全面解析-裝飾器模式的高級應(yīng)用:打造靈活可擴(kuò)展的通知系統(tǒng)

    在現(xiàn)代軟件開發(fā)中,通知系統(tǒng)是一個廣泛應(yīng)用的功能,用于實時向用戶發(fā)送各種類型的通知,如短信、微信、郵件以及系統(tǒng)通知。然而,通知系統(tǒng)的需求通常是多變且動態(tài)的,因此需要一種靈活可擴(kuò)展的設(shè)計模式來滿足不同類型的通知需求。 在前面一篇文章中,我們介紹了什

    2024年02月06日
    瀏覽(27)
  • 二十三種設(shè)計模式全面解析-橋接模式的高級應(yīng)用:構(gòu)建靈活的跨平臺UI框架

    在軟件開發(fā)的世界中,橋接模式(Bridge Pattern)作為一種設(shè)計模式,旨在將抽象部分與實現(xiàn)部分分離,從而使它們可以獨立地變化。這一模式的應(yīng)用不僅有助于提高代碼的可維護(hù)性,還在一些復(fù)雜的場景中展現(xiàn)出其真正的價值。 前面一篇文章中,我們介紹了什么是橋接模式?

    2024年02月05日
    瀏覽(35)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包