9.组合模式(Composite Pattern)
发布日期:2021-05-10 05:01:38
浏览次数:26
分类:技术文章
本文共 2265 字,大约阅读时间需要 7 分钟。
组合模式
在日常生活中可以发现很多整体-部分的关系,比如部门和员工,文件和文件夹等。
组合模式是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。
意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式的主要优点有:
- 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;
- 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;
其主要缺点是:
- 设计较复杂,客户端需要花更多时间理清类之间的层次关系;
- 不容易限制容器中的构件;
- 不容易用继承的方法来增加构件的新功能;
这里我们已文件夹-文件举例,文件夹有添加,删除,重命名等功能,同理文件也有这些功能。类图如下。
完整成码如下using System;using System.Collections.Generic;namespace _09_Composite{ ////// 组合模式 /// class Program { static void Main(string[] args) { AbstractFile all = new Folder("all"); AbstractFile txt = new File("a.txt"); AbstractFile exe = new File("qq.exe"); all.Add(txt); all.Add(exe); all.PrintName(); Console.ReadKey(); } } abstract class AbstractFile { protected string filename; public AbstractFile(string name) { filename = name; } public abstract void Add(AbstractFile af); public abstract void Remove(AbstractFile af); public abstract void PrintName(); public void Operation() { } } class File : AbstractFile { public File(string name):base(name) { } public override void Add(AbstractFile af) { Console.WriteLine("Add a file"); } public override void Remove(AbstractFile af) { Console.WriteLine("Remove a file"); } public override void PrintName() { Console.WriteLine("Print a file name:{0}",filename); } } class Folder : AbstractFile { Listafs = new List (); public Folder(string name):base(name) { } public override void Add(AbstractFile af) { afs.Add(af); } public override void Remove(AbstractFile af) { afs.Remove(af); } public override void PrintName() { Console.WriteLine(filename); foreach (AbstractFile af in afs) { af.PrintName(); } } }}
转载地址:https://blog.csdn.net/u012869793/article/details/115554340 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年08月19日 05时10分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
关于web系统整体优化提速总结
2019-05-24
稳定性三十六计-幂等设计
2019-05-24
分布式文件系统 - fastDFS
2019-05-24
BUAA OO 2019 第一单元作业总结
2019-05-24
格网编码查询方案在项目运用上的进一步探索
2019-05-24
Matlab适配器模式
2019-05-24
BUAA-OO-2019 第三单元总结
2019-05-24
Matlab策略模式
2019-05-24
架构整洁之道
2019-05-24
支付渠道路由系统进化史
2019-05-24
行为型模式:解释器模式
2019-05-24
深入理解设计模式(22):享元模式
2019-05-24
spring boot
2019-05-24
Angular框架
2019-05-24
行为型模式:模板方法
2019-05-24
spring cloud之Feign的使用
2019-05-24
Billboard HDU - 2795(树状数组,单点修改,区间查询)
2019-05-24
LeetCode刷题 --杂篇 --数组,链表,栈,队列
2019-05-24
840. 模拟哈希表(模板)
2019-05-24