91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

設計模式系列之訪問者模式的優點有哪些

發布時間:2021-10-25 11:02:54 來源:億速云 閱讀:334 作者:iii 欄目:web開發

本篇內容主要講解“設計模式系列之訪問者模式的優點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“設計模式系列之訪問者模式的優點有哪些”吧!

基本介紹

訪問者模式的基本概念:封裝一些作用于某種數據結構中元素上的操作。其有一個重要的特征是可以在不改變數據結構的前提下定義一些新的操作。

簡單來說訪問者模式主要的作用就是將“數據結構”和“數據操作”進行分離,解決這兩者之間耦合性的問題。

訪問者模式的基本執行原理就是在被訪問的類里添加一個接口,用于接待訪問者。

一般數情況下,當我們需要對一個數據結構中的元素進行很多不同的操作,并且這些操作彼此之間并沒有關聯,同時我們還想做到避免因為這些操作而“污染”了這些元素時,就可考慮使用訪問者模式

訪問者模式UML類圖

設計模式系列之訪問者模式的優點有哪些

類圖講解

Visitor:抽象訪問角色;通常情況下該數據結構中有幾個元素就會對應的在該類中為每一個元素提供一個訪問操作(方法)。
ConcreteVisitor:具體訪問者角色;繼承了Visitor并實現了其中定義的所以方法。
Element:抽象元素角色;該類會定義一個accept(接收)方法,用于接收訪問者。
ConcreteElement:具體元素角色;繼承了Element并實現了其中定義的accept方法。
ObjectStruture:該類定義了數據結構(對象結構),管理了所有元素,并且可以枚舉它的元素(也就是遍歷)。

案例講解

案例:開發一個員工審批功能,具體為不同角色的員工可以進行“同意”和“不同意”的審批。

抽象員工類 => 對應Element(抽象元素角色)

public abstract class Workers {    // 提供一個讓訪問者訪問的方法   public abstract void accept(Action action);  }

具體員工類

/**  * 經理  */ public class Manager extends Workers {    /**    *  這里用到了雙分派。    *    第一次分派:在客戶端中將具體的Action作為參數傳遞到Manager中。    *    第二次分派:Manager類調用Action中的具體方法,并將自己作為參數傳入。    */   @Override   public void accept(Action action) {     action.managerVerify(this);   } }  /**  * 組長  */ public class GroupLeader extends Workers {    @Override   public void accept(Action action) {     action.groupLeaderVerify(this);   } }

抽象行為類 => 對應Visitor(抽象訪問角色)

public abstract class Action {    // 經理進行審批   public abstract void managerVerify(Manager manager);    // 組長進行審批   public abstract void groupLeaderVerify(GroupLeader groupLeader);  }

具體行為類

/**  * 同意  */ public class Agree extends Action {    @Override   public void managerVerify(Manager manager) {     System.out.println("經理的審核結果為同意!");   }    @Override   public void groupLeaderVerify(GroupLeader groupLeader) {     System.out.println("組長的審核結果為同意!");   } }  /**  * 不同意  */ public class Disagree extends Action {    @Override   public void managerVerify(Manager manager) {     System.out.println("經理的審核結果為不同意!");   }    @Override   public void groupLeaderVerify(GroupLeader groupLeader) {     System.out.println("組長的審核結果為不同意!");   } }

ObjectStructure類

public class ObjectStructure {    // 維護了一個集合   private List<Workers> peoples = new ArrayList<>();    // 增加   public void attach(Workers workers) {     peoples.add(workers);   }    // 移除   public void detach(Workers workers) {     peoples.remove(workers);   }    // 顯示測評情況   public void display(Action action) {     for (Workers people : peoples) {       people.accept(action);     }   } }

客戶端測試類

public class Client {    public static void main(String[] args) {     ObjectStructure objectStructure = new ObjectStructure();     // 添加人     objectStructure.attach(new Manager());     objectStructure.attach(new GroupLeader());      // 同意     Agree agree = new Agree();     objectStructure.display(agree);   } }

執行結果

設計模式系列之訪問者模式的優點有哪些

總結

優點:

1、訪問者模式符合單一職責原則。
2、可以讓數據結構和數據操作之間解耦。
3、避免了因為操作元素而對其造成污染的問題。
4、讓程序具有擴展性的情況下還大大增加了靈活性。

缺點:

1、因為具體的元素對訪問者公布了實現細節,所以訪問者模式是違背了迪米特法則的。這樣做會導致元素變化比較困難。
2、因為訪問者依賴的是具體的元素而不是其抽象父類,所有該模式還違背了依賴倒轉原則。

到此,相信大家對“設計模式系列之訪問者模式的優點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

甘孜县| 芦山县| 阜城县| 南华县| 雷山县| 麻城市| 阜南县| 长治县| 富源县| 沁水县| 广元市| 化隆| 石景山区| 舟曲县| 花莲市| 齐河县| 广南县| 平凉市| 鄂伦春自治旗| 玉溪市| 肥乡县| 敦化市| 凤冈县| 建瓯市| 寻乌县| 峡江县| 衢州市| 通化县| 奇台县| 西贡区| 阳山县| 句容市| 太湖县| 商南县| 凤山县| 江西省| 靖远县| 南陵县| 武功县| 东阿县| 合水县|