合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。
2:类图
抽象构件(Component)角色:这是一个抽象角色,它给参与组合的对象规定一个接口。这个角色给出共有接口及其默认行为。
树叶构件(Leaf)角色:代表参加组合的树叶对象。一个树叶对象没有下级子对象。
树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
3:代码
/// <summary>
/// 抽象构件(Component)角色
/// </summary>
public interface IUserBase
{
void AddChild(IUserBase userBase);
void SetPower(string power);
}
/// <summary>
/// 树叶构件(Leaf)角色
/// </summary>
public class User:IUserBase
{
private string powerList = string.Empty;
public void AddChild(IUserBase userBase)
{
}
public void SetPower(string power)
{
powerList = power;
}
}
/// <summary>
/// 树枝构件(Composite)角色
/// </summary>
public class Group : IUserBase
{
private ArrayList userlist = new ArrayList();
public void AddChild(IUserBase userBase)
{
userlist.Add(userBase);
}
public void SetPower(string power)
{
foreach (IUserBase userbase in userlist)
{
userbase.SetPower(power);
}
}
}
//调用
Bll.Composite.Group group1 = new Bll.Composite.Group();
Bll.Composite.Group group2 = new Bll.Composite.Group();
Bll.Composite.User user1 = new Bll.Composite.User();
Bll.Composite.User user2 = new Bll.Composite.User();
Bll.Composite.User user3 = new Bll.Composite.User();
group1.AddChild(user1);
group1.AddChild(user2);
group2.AddChild(user1);
group2.AddChild(group1);
//设置组权限,则设置了组内的用户权限
group1.SetPower("权限列表A");
group2.SetPower("权限列表B");
user3.SetPower("权限列表B");
/// 抽象构件(Component)角色
/// </summary>
public interface IUserBase
{
void AddChild(IUserBase userBase);
void SetPower(string power);
}
/// <summary>
/// 树叶构件(Leaf)角色
/// </summary>
public class User:IUserBase
{
private string powerList = string.Empty;
public void AddChild(IUserBase userBase)
{
}
public void SetPower(string power)
{
powerList = power;
}
}
/// <summary>
/// 树枝构件(Composite)角色
/// </summary>
public class Group : IUserBase
{
private ArrayList userlist = new ArrayList();
public void AddChild(IUserBase userBase)
{
userlist.Add(userBase);
}
public void SetPower(string power)
{
foreach (IUserBase userbase in userlist)
{
userbase.SetPower(power);
}
}
}
//调用
Bll.Composite.Group group1 = new Bll.Composite.Group();
Bll.Composite.Group group2 = new Bll.Composite.Group();
Bll.Composite.User user1 = new Bll.Composite.User();
Bll.Composite.User user2 = new Bll.Composite.User();
Bll.Composite.User user3 = new Bll.Composite.User();
group1.AddChild(user1);
group1.AddChild(user2);
group2.AddChild(user1);
group2.AddChild(group1);
//设置组权限,则设置了组内的用户权限
group1.SetPower("权限列表A");
group2.SetPower("权限列表B");
user3.SetPower("权限列表B");