本文主要是介绍组合模式,宏指令和普通指令的聚合应用(设计模式与开发实践 P10),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 定义
- 举例
- 抽象类
- 文件系统常用
程序设计中有一些 事物是由相似的子事物 构成的例子
定义
回顾过去的命令模式,有一些命令里面包含了一个序列的操作,如果你玩魔兽世界或者类似的 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 List<Component> children;public Composite(string name) : base(name){children = new List<Component>();}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();}
}
抽象类
上面说到多态性和统一性,组合模式最大的优点就是可以一致地对待组合对象和基本对象,用户只需要知道他是一个命令,不需要知道他是 宏命令 还是 普通命令
文件系统常用
文件夹和文件之间的关系很适合用组合模式来描述,文件夹里面可以有 文件夹 也可以有 文件,最终可以组合成一棵树~
这篇关于组合模式,宏指令和普通指令的聚合应用(设计模式与开发实践 P10)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!