欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些

本篇內(nèi)容主要講解“設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些”吧!

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)烏拉特前免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

基本介紹

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

簡單來說訪問者模式主要的作用就是將“數(shù)據(jù)結(jié)構(gòu)”和“數(shù)據(jù)操作”進(jìn)行分離,解決這兩者之間耦合性的問題。

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

一般數(shù)情況下,當(dāng)我們需要對(duì)一個(gè)數(shù)據(jù)結(jié)構(gòu)中的元素進(jìn)行很多不同的操作,并且這些操作彼此之間并沒有關(guān)聯(lián),同時(shí)我們還想做到避免因?yàn)檫@些操作而“污染”了這些元素時(shí),就可考慮使用訪問者模式

訪問者模式UML類圖

設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些

類圖講解

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

案例講解

案例:開發(fā)一個(gè)員工審批功能,具體為不同角色的員工可以進(jìn)行“同意”和“不同意”的審批。

抽象員工類 => 對(duì)應(yīng)Element(抽象元素角色)

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

具體員工類

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

抽象行為類 => 對(duì)應(yīng)Visitor(抽象訪問角色)

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

具體行為類

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

ObjectStructure類

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

客戶端測(cè)試類

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);   } }

執(zhí)行結(jié)果

設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些

總結(jié)

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

1、訪問者模式符合單一職責(zé)原則。
2、可以讓數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作之間解耦。
3、避免了因?yàn)椴僮髟囟鴮?duì)其造成污染的問題。
4、讓程序具有擴(kuò)展性的情況下還大大增加了靈活性。

缺點(diǎn):

1、因?yàn)榫唧w的元素對(duì)訪問者公布了實(shí)現(xiàn)細(xì)節(jié),所以訪問者模式是違背了迪米特法則的。這樣做會(huì)導(dǎo)致元素變化比較困難。
2、因?yàn)樵L問者依賴的是具體的元素而不是其抽象父類,所有該模式還違背了依賴倒轉(zhuǎn)原則。

到此,相信大家對(duì)“設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章標(biāo)題:設(shè)計(jì)模式系列之訪問者模式的優(yōu)點(diǎn)有哪些
分享鏈接:http://chinadenli.net/article10/jijpgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)網(wǎng)站改版全網(wǎng)營銷推廣品牌網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管