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);
Matlab组合模式的更多相关文章
- ComponentPattern (组合模式)
import java.util.LinkedList; /** * 组合模式 * * @author TMAC-J 主要用于树状结构,用于部分和整体区别无区别的场景 想象一下,假设有一批连锁的理发店 ...
- 设计模式(十一):从文Finder中认识"组合模式"(Composite Pattern)
上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern),今天我们就从文件系统中来认识一下“组合模式”(Composite Pattern).说到组合模 ...
- 设计模式(十)组合模式(Composite Pattern)
一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...
- 设计模式--组合模式Composite(结构型)
一.概念 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 二.UML图 1.Component(对象接口),定义 ...
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- c#设计模式-组合模式
在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象 ...
- C#设计模式系列:组合模式(Composite)
1.组合模式简介 1.1>.定义 组合模式主要用来处理一类具有“容器特征”的对象——即它们在充当对象的同时,又可以作为容器包含其他多个对象. 1.2>.使用频率 中高 2.组合模式结构图 ...
- php实现设计模式之 组合模式
<?php /** * 组合模式 * * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 * * * 1) 抽象构件角色Co ...
- 轻松掌握:JavaScript组合模式
组合模式 组合模式:将一组对象组合成树形结构,并统一对待组合对象和叶对象,忽略它们之间的不同(因为叶对象也可以也可以包含叶对象而成为组合对象),组合模式中的对象只能是一对多的关系,不能出现多对一. 基 ...
随机推荐
- js中for..of..的使用和迭代器
for..of是ES6中引入的新特性,它主要的作用是:循环一个可迭代的对象. 它可以循环遍历,数组.字符串.Set对象等等,先来看两个简单的例子: 遍历字符串 let str = 'Hello' fo ...
- Python10大热门项目
文章地址:https://baijiahao.baidu.com/s?id=1625230403885659615&wfr=spider&for=pc 今天给大家盘点一下实验楼最热门的 ...
- (原)使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究
使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究 Author:lihaiping1603@aliyun.com Create:2019-09-04 最近对ffmpeg给视频文件添加字幕效果 ...
- Difference between LinkedList vs ArrayList in Java
source-url LinkedList implements it with a doubly-linked list. ArrayList implements it with a dynami ...
- java main方法
1.问题:Java main方法为什么是 public static void main(String[] args)??? 序号 场景 编译 运行 解释 1 public修改为private pr ...
- 二级C语言模拟试题(第1套)
1. 选择题. 1-1,判断各种变量所占的字节数. #include<stdio.h> int main() { char p[] = {'6','2','3'}, *q = p; int ...
- 基于redis+lua实现高并发场景下的秒杀限流解决方案
转自:https://blog.csdn.net/zzaric/article/details/80641786 应用场景如下: 公司内有多个业务系统,由于业务系统内有向用户发送消息的服务,所以通过统 ...
- netcore 版本 切换 sdk
https://docs.microsoft.com/zh-cn/dotnet/core/tools/global-json
- SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
<传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...
- JAVA–利用Filter和session防止页面重复提交
JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览 ...