网站做全局搜索,销售平台有哪些,怎么制作网站的链接宏,黑龙江人事考试网文章目录 定义举例抽象类文件系统常用 程序设计中有一些 事物是由相似的子事物 构成的例子
定义
回顾过去的命令模式#xff0c;有一些命令里面包含了一个序列的操作#xff0c;如果你玩魔兽世界或者类似的 MMO 游戏#xff0c;里面你会用到 宏指令#xff0c;就是一个指… 文章目录 定义举例抽象类文件系统常用 程序设计中有一些 事物是由相似的子事物 构成的例子
定义
回顾过去的命令模式有一些命令里面包含了一个序列的操作如果你玩魔兽世界或者类似的 MMO 游戏里面你会用到 宏指令就是一个指令包含了一系列操作
那么这个 Macro Command 整合了几个不同的指令对象形成了一个 树状结构这就使得我们可以方便地描述 对象部分-整体层次结构 了
举例
这里使用 C# 举例叶子和容器都属于 Component 类具有多态性又具有统一性所以客户调用时无需关注调用的是 组合 还是 子对象
using System;
using System.Collections.Generic;// 组件接口
public abstract class Component
{protected string name;public Component(string name){this.name name;}public abstract void PerformAction();
}// 叶子组件
public class Leaf : Component
{public Leaf(string name) : base(name){}public override void PerformAction(){Console.WriteLine($执行{name}的操作);}
}// 容器组件
public class Composite : Component
{private ListComponent children;public Composite(string name) : base(name){children new ListComponent();}public void Add(Component component){children.Add(component);}public void Remove(Component component){children.Remove(component);}public override void PerformAction(){Console.WriteLine($执行{name}的操作);foreach (var child in children){child.PerformAction();}}
}// 使用示例
class Program
{static void Main(string[] args){// 创建组件对象var root new Composite(家庭);var parent1 new Composite(父母);var parent2 new Composite(叔叔);var child1 new Leaf(孩子1);var child2 new Leaf(孩子2);var child3 new Leaf(孩子3);// 构建组件树root.Add(parent1);root.Add(parent2);parent1.Add(child1);parent1.Add(child2);parent2.Add(child3);// 执行操作root.PerformAction();Console.ReadLine();}
}抽象类
上面说到多态性和统一性组合模式最大的优点就是可以一致地对待组合对象和基本对象用户只需要知道他是一个命令不需要知道他是 宏命令 还是 普通命令
文件系统常用
文件夹和文件之间的关系很适合用组合模式来描述文件夹里面可以有 文件夹 也可以有 文件最终可以组合成一棵树