您的位置:首页 > 其它

设计模式学习笔记:组合模式

2011-06-26 07:53 441 查看
本文主要分为三部分:1、组合模式的基本定义;2、组合模式的类图结构;3、代码示例

一、定义

Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

二、类图结构





三、代码示例

例子:一个项目包含多个文件夹、类、接口等,而一个文件夹也同样可以包含多个文件夹、类、接口。

代码:

项目抽象类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace y.CompositePattern
{
public abstract class ComponentProject
{
protected string name = string.Empty;

public ComponentProject(string name)
{
this.name = name;
}

public abstract void Add(ComponentProject componentProject);
public abstract void Remove(ComponentProject componentProject);
public abstract void ShowTitle(int depth);
}
}


文件夹实现类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace y.CompositePattern
{
public class CompositeFolder:ComponentProject
{
private List<ComponentProject> subFolder = new List<ComponentProject>();
public CompositeFolder(string name)
: base(name)
{ }

public override void Add(ComponentProject componentProject)
{
subFolder.Add(componentProject);
}
public override void Remove(ComponentProject componentProject)
{
subFolder.Remove(componentProject);
}
public override void ShowTitle(int depth)
{
Console.WriteLine(new string('-',depth)+name);
foreach(ComponentProject project in subFolder)
{
project.ShowTitle(depth+2);
}
}

}
}


”类“实现类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace y.CompositePattern
{
public class LeafClass:ComponentProject
{
public LeafClass(string name)
: base(name)
{ }

public override void Add(ComponentProject componentProject)
{
}
public override void Remove(ComponentProject componentProject)
{
}

public override void ShowTitle(int depth)
{
Console.WriteLine(new string('-', depth) + name);
}
}
}


“接口”实现类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace y.CompositePattern
{
public class LeafInterface:ComponentProject
{
public LeafInterface(string name)
: base(name)
{ }

public override void Add(ComponentProject componentProject)
{

}

public override void Remove(ComponentProject componentProject)
{

}

public override void ShowTitle(int depth)
{
Console.WriteLine(new string('-', depth) + name);
}
}
}


主程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace y.CompositePattern
{
class Program
{
static void Main(string[] args)
{
Console.Title="组合模式";
Console.WriteLine("Press any ket to exit program.\r\n");
CompositeFolder mainFolder = new CompositeFolder("Composite Example");
mainFolder.Add(new LeafClass("Main Class"));
mainFolder.Add(new LeafInterface("Main Interface"));

CompositeFolder bussinessFolder = new CompositeFolder("Bussiness Folder");
bussinessFolder.Add(new LeafInterface("Bussiness Interface"));
bussinessFolder.Add(new LeafClass("Bussiness Class"));

mainFolder.Add(bussinessFolder);

CompositeFolder databaseFolder = new CompositeFolder("Database Folder");
databaseFolder.Add(new LeafInterface("Database Interface"));
databaseFolder.Add(new LeafClass("Database Class"));

mainFolder.Add(databaseFolder);

Console.WriteLine("Composite Struct:");
mainFolder.ShowTitle(1);

Console.ReadKey();
}
}
}


参考文献:

《大话设计模式》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: