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 {
List
afs = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:10.外观模式(Facade Pattern)
下一篇:8.装饰器模式(Decorator Pattern)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年08月19日 05时10分30秒