一、组合模式的介绍
组合我们第一下想到的肯定是由部分到整体,没错确实就是这样,我的理解就是整体与部分的层次关系,且在关系中的所有对象都有相同的操作;这个来试用场景大家或许更明白文件夹的操作,组织架构等等,反正这一类具有层次关系的我们都可以考虑是否使用组合模式。
二、组合模式的Demo
public abstract class Position
{
public string _name;
public Position(string name)
{
this._name = name;
}
//添加职位
public abstract void AddPosition(Position postion);
//删除职位
public abstract void RemovePostion(Position postion);
//展示职位
public abstract string DisplayPostion(int depth);
}
//管理
class Manger : Position
{
private List<Position> manger = new List<Position>();
public Manger(string name) : base(name)
{
}
public override void AddPosition(Position postion)
{
manger.Add(postion);
}
public override void RemovePostion(Position postion)
{
manger.Remove(postion);
}
public override string DisplayPostion(int depth)
{
string dis = "";
dis += new String(‘-‘, depth) + _name + ‘\n‘;
foreach(Position p in manger)
{
dis += p.DisplayPostion(depth+2);
}
Console.WriteLine(dis);
return dis;
}
}
//职员
class Employee : Position
{
public Employee(string name) : base(name)
{
}
public override void AddPosition(Position postion)
{
Console.WriteLine("不能添加下属职位");
}
public override void RemovePostion(Position postion)
{
Console.WriteLine("不能移除下属职位");
}
public override string DisplayPostion(int depth)
{
string dis = "";
dis += new String(‘-‘, depth) + _name + "\n";
Console.WriteLine(dis);
return dis;
}
}
class Program
{
static void Main(string[] args)
{
Manger manager = new Manger("经理");
manager.AddPosition(new Employee("经理助理"));
manager.AddPosition(new Employee("经理秘书"));
Manger derp = new Manger("技术经理");
derp.AddPosition(new Employee("程序员"));
manager.AddPosition(derp);
manager.DisplayPostion(1);
Console.ReadKey();
}
}
三、设计模式源码下载
GitHub:https://github.com/wangtongzhou520/Designpattern