设计模式之组合模式
时间:2022-07-22
本文章向大家介绍设计模式之组合模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
设计模式之组合模式
结构
说明
Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
把多个对象组成树状结构来表示局部与整体,这样用户可以一样的对待单个对象和对象的组合。
适用条件
- 四则运算、逻辑运算以及 SQL 语句等都可以用组合模式表示;
- 命令: 一个命令经常可以有若干个子命令表示;
- 事务: 最典型的事务时测试用例。
实现
interface IGraphic {
void Print();
}
class CompositeGraphic : IGraphic {
private readonly IList<IGraphic> _childGraphics = new List<IGraphic>();
public void Print() {
foreach (var childGraphic in _childGraphics) {
childGraphic.Print();
}
}
public void Add(IGraphic graphic) {
this._childGraphics.Add(graphic);
}
public void Remove(IGraphic graphic) {
this._childGraphics.Remove(graphic);
}
}
class Ellipse : IGraphic {
public void Print() {
Console.WriteLine("Ellipse");
}
}
class Program {
static void Main(string[] args) {
var ellipse1 = new Ellipse();
var ellipse2 = new Ellipse();
var ellipse3 = new Ellipse();
var ellipse4 = new Ellipse();
var graphic = new CompositeGraphic();
var graphic1 = new CompositeGraphic();
var graphic2 = new CompositeGraphic();
graphic1.Add(ellipse1);
graphic1.Add(ellipse2);
graphic1.Add(ellipse3);
graphic2.Add(ellipse4);
graphic.Add(graphic1);
graphic.Add(graphic2);
graphic.Print();
Console.ReadKey();
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证
- 【Rust日报】2020-09-14 测试数据表明, Rust 可以帮你省钱!
- 【43期】盘点那些必问的数据结构算法题之二叉树基础
- 精讲RestTemplate第8篇-请求失败自动重试机制
- 精讲RestTemplate第7篇-自定义请求失败异常处理
- 精讲RestTemplate第10篇-使用代理作为跳板发送请求
- 精讲响应式WebClient第5篇-请求超时设置与异常处理
- 精讲响应式WebClient第4篇-文件上传与下载
- 【大家的项目】Rust Base62 库学习和分析
- ES2020 中 Javascript 10 个你应该知道的新功能
- Webpack5 跨应用代码共享 - Module Federation
- 【Rust日报】2020-09-16 - Rust 2021 规划
- 精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用
- C++的黑魔法: 用四种方式实现add!
- 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解