zoukankan      html  css  js  c++  java
  • Matlab组合模式

    组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的目的是让客户端不再区分操作的是组合对象(Composite)还是叶子对象(Leaf),而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样一来,客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。计算机系统的文件夹相当于组合模式的Composite,文件相当于组合模式的Leaf。本文按照下面的类图,用Matlab代码实现组合模式。

    Component.m

    classdef Component < handle & matlab.mixin.Heterogeneous
        properties(Access = protected)
            name
        end
        methods
            function obj = Component(name)
                obj.name = name;
            end
        end
        methods(Abstract)
            Add(~,~);
            Remove(~,~);
            Display(~,~);
        end
        methods(Sealed)   
            function res = eq(obj1,obj2)
                res = eq@handle(obj1,obj2);
            end
            function res = ne(obj1,obj2)
                res = ne@handle(obj1,obj2);
            end
        end 
    end
    

    Composite.m

    classdef Composite < Component
        properties(Access = private)
            children = Component.empty();
        end    
        methods
            function obj = Composite(name)
               obj = obj@Component(name);
            end        
            function Add(obj,c)
                obj.children(end + 1)=c;
            end
            function Remove(obj,c)
                index = [obj.children] ~= c;
                obj.children = obj.children(index);
            end
            function Display(obj,depth)
                temp = "";
                for i = 1:depth
                    temp = temp + "-";
                end
                disp(temp + obj.name);
                for i = 1:length(obj.children)
                    obj.children(i).Display(depth + 1);
                end
            end
        end
    end

    Leaf.m

    classdef Leaf < Component
        methods
            function obj = Leaf(name)
               obj = obj@Component(name);
            end       
            function Add(~,~)          
            end
            function Remove(~,~)           
            end
            function Display(obj,depth)
                temp = "";
                for i = 1:depth
                    temp = temp + "-";
                end
                disp(temp + obj.name);
            end
        end
    end

    测试代码

    root = Composite("Composite root");
    compX = Composite("Composite X");
    root.Add(Leaf("Leaf A"));
    root.Add(compX);
    root.Add(Leaf("Leaf B"));
    compX.Add(Leaf("Leaf XA"));
    compX.Add(Leaf("Leaf XB"));
    compXY = Composite("Composite XY");
    compX.Add(compXY);
    leafXYA = Leaf("Leaf XYA");
    compXY.Add(leafXYA);
    compXY.Add(Leaf("Leaf XYB"));
    compXY.Remove(leafXYA);
    root.Display(0);
  • 相关阅读:
    主题:钩子函数简析及实例
    boa安装
    Inno Setup入门(二十一)——Inno Setup类参考(7)
    Inno Setup入门(二十)——Inno Setup类参考(6)
    Inno Setup入门(十九)——Inno Setup类参考(5)
    Inno Setup入门(十八)——Inno Setup类参考(4)
    Inno Setup入门(十七)——Inno Setup类参考(3)
    Inno Setup入门(十六)——Inno Setup类参考(2)
    sqlite 增加字段语句
    判断 Selite中标存在或者字段存在的方法
  • 原文地址:https://www.cnblogs.com/usaddew/p/10914789.html
Copyright © 2011-2022 走看看