Matlab訪問者模式

訪問者(Visitor)模式的定義:將做用於某種數據結構中的各元素的操做分離出來封裝成獨立的類,使其在不改變數據結構的前提下能夠添加做用於這些元素的新的操做,爲數據結構中的每一個元素提供多種訪問方式。它將對數據的操做與數據結構(Element)進行分離,數據結構的類只須要提供對"訪問者"開放的接口(API),而對元素的具體處理則做交給訪問者(Visitor)負責。數據結構

訪問者模式中的角色:
Visitor:表示訪問者的抽象類,用於聲明對數據結構中xxx元素訪問的visit(xxx)方法。
ConcreteVisitor:表示具體的訪問者,繼承Visitor並對其聲明的抽象方法提供具體實現。
Element:表示元素的抽象類,即訪問者實際要訪問的對象,Element角色須要對訪問者提供一個開放的接口,即accept方法,該方法的參數就是Visitor角色。
ConcreteElement:表示具體的元素,提供accept方法的實現。
ObjectStructure:負責處理Element元素的集合,即表示數據結構的類。
類圖:測試

Element.mthis

classdef Element < handle & matlab.mixin.Heterogeneous
    methods(Abstract)
        accept(~,~);
    end   
end

ElementA.m.net

classdef ElementA < Element
    methods
        function accept(obj,visitor)
            visitor.visitElementA(obj);
        end
        function operationA(~)
            disp("this is OperationA")
        end
    end   
end

ElementB.m對象

classdef ElementB < Element
    methods
        function accept(obj,visitor)
            visitor.visitElementB(obj);
        end
        function operationB(~)
            disp("this is OperationB")
        end
    end   
end

Visitor.mblog

classdef Visitor < handle
    methods(Abstract)
       visitElementA(~,~);
       visitElementB(~,~);
    end
end

ConcreteVisitorA.m繼承

classdef ConcreteVisitorA < Visitor    
    methods
        function visitElementA(~,element)
            disp("ConcreteVisitorA 訪問 ElementA");           
            element.operationA();
        end       
        function visitElementB(~,element)
            disp("ConcreteVisitorA 訪問 ElementB");            
            element.operationB();
        end        
    end    
end

ConcreteVisitorB.m接口

classdef ConcreteVisitorB < Visitor    
    methods
        function visitElementA(~,element)
            disp("ConcreteVisitorB 訪問 ElementA");           
            element.operationA();
        end       
        function visitElementB(~,element)
            disp("ConcreteVisitorB 訪問 ElementB");            
            element.operationB();
        end        
    end    
end

ObjectStructure.melement

classdef ObjectStructure < handle
    properties
        elements = Element.empty();
    end
    methods
        function handleRequest(obj,visitor)       
            for i = 1:length(obj.elements) 
                obj.elements(i).accept(visitor);
            end
        end
        function addElement(obj,ele)
            obj.elements(end + 1) = ele;
        end
    end
end

 測試代碼:get

os = ObjectStructure();
eleA = ElementA();
eleB = ElementB();
os.addElement(eleA);
os.addElement(eleB);
visitor = ConcreteVisitorA();
os.handleRequest(visitor);

 參考資料:

https://blog.csdn.net/iluojie/article/details/80382901

https://blog.csdn.net/SomeoneMH/article/details/80591429

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息