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

設計模式——訪問者模式

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

訪問者模式(Visitor Pattern)是一種行為型設計模式,它主要用于在不修改現(xiàn)有類結構的前提下向對象結構添加新的操作。訪問者模式通過定義一個訪問者接口,使得可以在不改變元素類的情況下,為各個元素類增加新的功能。

原理

  • 元素接口(Element Interface): 定義了一個accept()方法,用于接收訪問者對象的訪問。
  • 具體元素類(Concrete Elements): 實現(xiàn)了元素接口,并且每個類都可能有自己特有的業(yè)務邏輯和數(shù)據(jù)。
  • 訪問者接口(Visitor Interface): 定義了一系列訪問元素的方法,對應不同的具體元素類型。
  • 具體訪問者類(Concrete Visitors): 實現(xiàn)了訪問者接口,提供了對每個具體元素類進行特定操作的方法。

Java代碼示例

// 元素接口
public interface Element {
    void accept(Visitor visitor);
}

// 具體元素類 - 文件
public class File implements Element {
    private String name;
    
    public File(String name) {
        this.name = name;
    }

    @Override
    public void accept(Visitor visitor) {
        visitor.visitFile(this);
    }
    
    // 獲取文件名
    public String getName() {
        return name;
    }
}

// 具體元素類 - 文件夾
public class Folder implements Element {
    private List<Element> children;
    
    public Folder() {
        this.children = new ArrayList<>();
    }

    public void addElement(Element child) {
        children.add(child);
    }

    @Override
    public void accept(Visitor visitor) {
        visitor.visitFolder(this);
        for (Element child : children) {
            child.accept(visitor);
        }
    }
    
    // 獲取子元素列表
    public List<Element> getChildren() {
        return children;
    }
}

// 訪問者接口
public interface Visitor {
    void visitFile(File file);
    void visitFolder(Folder folder);
}

// 具體訪問者類 - 計算文件總數(shù)與大小
public class SizeCalculator implements Visitor {
    private int fileCount;
    private long totalSize;

    public SizeCalculator() {
        fileCount = 0;
        totalSize = 0L;
    }

    @Override
    public void visitFile(File file) {
        fileCount++;
        // 假設我們已有一個獲取文件大小的方法
        totalSize += getFileSize(file.getName());
    }

    @Override
    public void visitFolder(Folder folder) {
        for (Element element : folder.getChildren()) {
            element.accept(this);
        }
    }

    public int getFileCount() {
        return fileCount;
    }

    public long getTotalSize() {
        return totalSize;
    }

    // 示例方法,實際中需要從磁盤或數(shù)據(jù)庫獲取
    private long getFileSize(String fileName) {
        // 這里僅作演示,實際上會根據(jù)文件名獲取真實大小
        return 1024; // 假設每個文件大小為1KB
    }
}

// 使用示例
public class Client {
    public static void main(String[] args) {
        Folder root = new Folder();
        root.addElement(new File("file1.txt"));
        root.addElement(new File("file2.txt"));
        Folder subFolder = new Folder();
        subFolder.addElement(new File("subFile1.txt"));
        root.addElement(subFolder);

        SizeCalculator calculator = new SizeCalculator();
        root.accept(calculator);

        System.out.println("Total files: " + calculator.getFileCount());
        System.out.println("Total size: " + calculator.getTotalSize());
    }
}

想象你正在管理一個圖書館,書架上有各種書籍和盒子(代表文件和文件夾)。當你要統(tǒng)計所有書籍的數(shù)量和總體積時,你可以扮演“訪問者”的角色,逐個檢查每本書籍和盒子。打開盒子后,再繼續(xù)檢查盒子里的內容。在這個過程中,你不需要修改書本或盒子本身,而是通過定義一套針對不同對象的操作規(guī)則(訪問者接口),實現(xiàn)了靈活的功能擴展。文章來源地址http://www.zghlxwxcb.cn/news/detail-802508.html

應用場景

  • 文件系統(tǒng)遍歷:定義一個訪問者來統(tǒng)計文件夾中的文件數(shù)量、計算總大小等。
  • 編譯器語法分析:遍歷抽象語法樹(AST),對不同類型的節(jié)點執(zhí)行不同的處理,如類型檢查、代碼生成等。

適用性

  • 對象結構穩(wěn)定但需要頻繁增加新的操作。
  • 需要對一組相似的對象結構執(zhí)行不同的操作。
  • 想要在不影響這些對象的情況下定義新操作。

到了這里,關于設計模式——訪問者模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 設計模式之-訪問者模式,快速掌握訪問者模式,通俗易懂的講解訪問者模式以及它的使用場景

    當談到訪問者模式時,我們可以通過以下方式進行詳細解釋: 訪問者模式是一種行為型設計模式,它允許你在不修改已有代碼的情況下,向現(xiàn)有對象結構添加新的操作。該模式將操作(或方法)封裝在稱為訪問者的獨立對象中,使得可以在不修改元素類的情況下,通過訪問者

    2024年02月03日
    瀏覽(27)
  • 設計模式——訪問者模式

    訪問者模式(Visitor Pattern)是一種行為型設計模式,它主要用于在不修改現(xiàn)有類結構的前提下向對象結構添加新的操作。訪問者模式通過定義一個訪問者接口,使得可以在不改變元素類的情況下,為各個元素類增加新的功能。 元素接口(Element Interface): 定義了一個accept()方法

    2024年01月18日
    瀏覽(35)
  • 設計模式—訪問者模式

    設計模式—訪問者模式

    ?需求:店鋪采購了一批水果(蘋果及橘子),現(xiàn)在市場監(jiān)督局來店里檢查過期的水果。 如果此時再添加一個操作:找出新品上市的水果。 上述代碼中,F(xiàn)ruitMarket為應付新增操作,增加了相應的方法來滿足要求,但這樣破壞了FruitMarket的結構。 本質是將數(shù)據(jù)結構和數(shù)據(jù)操作分

    2024年02月10日
    瀏覽(23)
  • 【訪問者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    【訪問者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實現(xiàn)

    訪問者模式(Visitor Pattern)是一種行為型模式。它封裝一個訪問者類,把各元素類的操作集合起來,目的是將數(shù)據(jù)結構與數(shù)據(jù)操作分離。在不改變原有元素類數(shù)據(jù)結構的前提下,改變了元素類的執(zhí)行算法。 當某些較為穩(wěn)定的東西(數(shù)據(jù)結構或算法),不想直接被改變但又想擴

    2024年02月02日
    瀏覽(22)
  • 設計模式——19. 訪問者模式

    訪問者模式(Visitor Pattern)是一種行為型設計模式,它允許你在不改變元素類(被訪問者)的前提下,定義對元素的新操作(訪問者),并將這些操作封裝到獨立的訪問者類中。這樣,你可以在不修改被訪問者的類的情況下,通過不同的訪問者來執(zhí)行不同的操作。 訪問者模式

    2024年02月07日
    瀏覽(23)
  • 設計模式之訪問者模式(下)

    設計模式之訪問者模式(下)

    3)訪問者模式與組合模式聯(lián)用 1.概述 在訪問者模式中,包含一個用于存儲元素對象集合的對象結構,可以使用迭代器來遍歷對象結構,同時具體元素之間可以存在整體與部分關系,有些元素作為容器對象,有些元素作為成員對象,可以使用組合模式來組織元素。 2.結構圖

    2024年04月25日
    瀏覽(31)
  • 設計模式之訪問者模式(上)

    設計模式之訪問者模式(上)

    訪問者模式 1)概述 1.概念 訪問者模式包含 訪問者 和 被訪問元素 兩個主要組成部分。 處方單中的各種藥品信息就是 被訪問的元素 ,而劃價人員和藥房工作人員就是 訪問者 ,被訪問的元素通常具有不同的類型,且不同的訪問者可以對它們進行不同的訪問操作。 被訪問元素

    2024年04月25日
    瀏覽(56)
  • js設計模式:訪問者模式

    js設計模式:訪問者模式

    將操作方法封裝在一個訪問者對象中,而不是封裝在每個被訪問對象當中。 訪問者對象可以通過調用被訪問者的接口,用來操作被訪問者。

    2024年02月22日
    瀏覽(37)
  • 設計模式:訪問者模式(C++實現(xiàn))

    訪問者模式通過將對元素的操作與元素本身分離,使得可以在不修改元素類的情況下定義新的操作。 運行結果: 在上述代碼中,Visitor是訪問者接口,定義了訪問具體元素的方法。Element是元素接口,定義了接受訪問者訪問的方法。ConcreteElementA和ConcreteElementB是具體元素類,實

    2024年02月07日
    瀏覽(36)
  • 設計模式(二十三)訪問者

    設計模式(二十三)訪問者

    表示一個作用于某對象結構中的各個元素的操作。訪問者模式讓你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式是一種對象行為型模式 訪問者模式是一種較為復雜的行為型模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素

    2024年02月19日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包