摘要:訪問(wèn)者模式一訪問(wèn)者模式定義表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素操作它使你可以在不改變各元素類的前提下,定義作用于這些元素的新操作角色抽象訪問(wèn)者對(duì)象具體訪問(wèn)者對(duì)象抽象元素對(duì)象具體元素對(duì)象結(jié)構(gòu)對(duì)象二具體實(shí)現(xiàn)創(chuàng)建抽象元素對(duì)象創(chuàng)建具體元素對(duì)象創(chuàng)建抽象
訪問(wèn)者模式
一. 訪問(wèn)者模式 1.1 定義表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素操作.它使你可以在不改變各元素類的前提下,定義作用于這些元素的新操作.
1.2 角色抽象訪問(wèn)者對(duì)象(Visit).
具體訪問(wèn)者對(duì)象(ConcreteVisit).
抽象元素對(duì)象(Element).
具體元素對(duì)象(ConcreteElement).
結(jié)構(gòu)對(duì)象(ObjectStructure).
二. 具體實(shí)現(xiàn) 2.1 創(chuàng)建抽象元素對(duì)象public interface IElement { void accept(IVisitor visitor); }2.2 創(chuàng)建具體元素對(duì)象
public class ElementA implements IElement { @Override public void accept(IVisitor visitor) { visitor.visit(this); } } public class ElementB implements IElement { @Override public void accept(IVisitor visitor) { visitor.visit(this); } }2.3 創(chuàng)建抽象訪問(wèn)者對(duì)象
public interface IVisitor { void visit(ElementA element); void visit(ElementB element); }2.4 創(chuàng)建具體訪問(wèn)者對(duì)象
public class Visitor implements IVisitor { @Override public void visit(ElementA element) { System.out.println("ElementA visit ... "); } @Override public void visit(ElementB element) { System.out.println("ElementB visit ... "); } }2.5 調(diào)用
public static void main(String[] args) { IElement element = new ElementA(); IVisitor visitor = new Visitor(); element.accept(visitor); element = new ElementB(); element.accept(visitor); }2.6 輸出
ElementA visit ... ElementB visit ...三. 優(yōu)缺點(diǎn) 3.1 優(yōu)點(diǎn)
良好的擴(kuò)展性.
靈活性.
3.2 缺點(diǎn)增加新的元素類困難.
四. 源碼https://github.com/Seasons20/DisignPattern.git
END
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69748.html
摘要:適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。代理模式為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。如果用來(lái)解決排序問(wèn)題不符合開閉原則,添加策略需要修改代碼用策略模式將策略抽象成接口,不同的策略實(shí)現(xiàn)該接口。 簡(jiǎn)單工廠、工廠方法、抽象工廠 簡(jiǎn)單工廠 通過(guò)定義多個(gè)factory.produceXXX()方法,或者通過(guò)向factory.produce(type)傳遞type參數(shù)來(lái)生成...
摘要:訪問(wèn)者模式解決的問(wèn)題在我們的代碼編寫過(guò)程當(dāng)中,經(jīng)常需要對(duì)一些類似的對(duì)象添加一些的代碼,我們以一個(gè)計(jì)算機(jī)對(duì)象打印組成部分為例來(lái)看下抽象基類獲取名稱類內(nèi)存類鍵盤類計(jì)算機(jī)類循環(huán)打印各個(gè)組成部分這個(gè)時(shí)候上面的代碼看上去好像很完美的樣子,但是問(wèn) 訪問(wèn)者模式解決的問(wèn)題 在我們的代碼編寫過(guò)程當(dāng)中,經(jīng)常需要對(duì)一些類似的對(duì)象添加一些的代碼,我們以一個(gè)計(jì)算機(jī)對(duì)象打印組成部分為例來(lái)看下: /** ...
摘要:原文地址原文作者是抽象語(yǔ)法樹的縮寫詞,表示編程語(yǔ)言的語(yǔ)句和表達(dá)式中生成的。解釋器將會(huì)遍歷該數(shù)組并執(zhí)行里面的語(yǔ)句。,,,是一組相關(guān)的類,每一個(gè)類都需要攜帶方法以使解釋器獲得它們的值或者對(duì)它們求值。 原文地址:What is an Abstract Syntax Tree 原文作者:Chidume Nnamdi showImg(https://segmentfault.com/img...
摘要:概念訪問(wèn)者模式實(shí)際上是讓外部類能夠獲取樹形結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)的對(duì)象,對(duì)每個(gè)對(duì)象進(jìn)行操作的模式,他能讓我們?cè)诓桓膭?dòng)原有樹形結(jié)構(gòu)的基礎(chǔ)上擴(kuò)展功能。 概念: 訪問(wèn)者模式實(shí)際上是讓外部類能夠獲取樹形結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)的對(duì)象,對(duì)每個(gè)對(duì)象進(jìn)行操作的模式, 他能讓我們?cè)诓桓膭?dòng)原有樹形結(jié)構(gòu)的基礎(chǔ)上擴(kuò)展功能。比如統(tǒng)計(jì)等等 在這種模式下,必須有的幾個(gè)要素: 1: 具體的元素對(duì)象, 訪問(wèn)者實(shí)際要訪問(wèn)的位置(即節(jié)...
摘要:但是發(fā)出者并不清楚到底最終那個(gè)對(duì)象會(huì)處理該請(qǐng)求,所以,責(zé)任鏈模式可以實(shí)現(xiàn),在隱瞞客戶端的情況下,對(duì)系統(tǒng)進(jìn)行動(dòng)態(tài)的調(diào)整。因?yàn)樵L問(wèn)者模式使得算法操作增加變得容易。訪問(wèn)者模式將有關(guān)行為集中到一個(gè)訪問(wèn)者對(duì)象中,其改變不影響系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。 總體分為3大類:創(chuàng)建型模式 (5種):工廠方法、抽象工廠、單例、建造者、原型結(jié)構(gòu)型模式(7種):適配器、裝飾器、代理、外觀、橋接、組合、享元行為型模式(11種...
閱讀 3448·2021-11-25 09:43
閱讀 2249·2021-09-22 10:02
閱讀 3628·2021-09-06 15:00
閱讀 2451·2019-08-30 15:56
閱讀 2502·2019-08-30 15:54
閱讀 3375·2019-08-30 14:14
閱讀 2397·2019-08-29 17:25
閱讀 3065·2019-08-29 17:16