您的位置:首页 > 其它

组合模式

2016-01-25 14:45 337 查看




要点:组合模式提供一个结构,可同时包容组合对象与个别对象。

组合模式容许客户对个别对象以及组合对象一视同仁。

组合结构内的任意对象成为组件。组件可以是组合,也可以是叶节点。

下面是组合模式的例子:



class Program
{
static void Main(string[] args)
{
//定义早餐====================================================================
MenuComponent menu = new Menu("早餐", "新鲜的早餐");

MenuComponent menuItem1 = new MenuItem("牛奶", "牛奶description", false, 3.0);
MenuComponent menuItem2 = new MenuItem("油条", "油条description", false, 1.0);
MenuComponent menuItem3 = new MenuItem("馒头", "馒头description", true, 1.0);
MenuComponent menuItem4 = new MenuItem("豆浆", "DoujiangDescription", true, 1.5);

menu.Add(menuItem1);
menu.Add(menuItem2);
menu.Add(menuItem3);
menu.Add(menuItem4);

//定义午餐====================================================================
MenuComponent lunch = new Menu("午餐", "包括下午茶");

MenuComponent lunch1=new  MenuItem("香菇豆腐饭", "香菇豆腐", false, 10.5);
MenuComponent lunch2 = new MenuItem("蛋炒饭", "哈哈", false, 8.5);
MenuComponent lunch3 = new MenuItem("鱼香肉丝", "你猜", true, 15.5);
MenuComponent tea = new Menu("下午茶", "新鲜的下午茶");

MenuComponent tea1 = new MenuItem("香蕉片", "香蕉片", true, 10);
MenuComponent tea2 = new MenuItem("咖啡", "大杯的哦", true, 10);

tea.Add(tea1);
tea.Add(tea2);

lunch.Add(lunch1);
lunch.Add(lunch2);
lunch.Add(lunch3);
lunch.Add(tea);

//定义三餐====================================================================
MenuComponent food = new Menu("三餐", "三餐列表");
food.Add(menu);
food.Add(lunch);
food.Print();
Console.ReadKey();
}

}

/// <summary>
/// 菜单组件
/// </summary>
public abstract class MenuComponent
{
public abstract void Add(MenuComponent menucomponent);

public abstract  void Remove(MenuComponent menucomponent);

public abstract MenuComponent GetChild(int i);

public abstract string GetDescription();

public abstract string GetName();

public abstract double GetPrice();

public abstract bool IsVegetarian();

public abstract void Print();
}

public class MenuItem:MenuComponent
{
private string name;
private string description;
private bool vegetarin;
private double price;

public MenuItem(string name, string description, bool vegetarin, double price)
{
this.name = name;
this.description = description;
this.vegetarin = vegetarin;
this.price = price;
}

public override  string GetName()
{
return name;
}

public override double GetPrice()
{
return price;
}

public override bool IsVegetarian()
{
return vegetarin;
}

public override string GetDescription()
{
return description;
}

public override void Print()
{
Console.Write(""+GetName()+",");
if (IsVegetarian())
{
Console.Write("(素) ,");
}
Console.Write(GetPrice()+"¥,");
Console.WriteLine(GetDescription()+"。");
}

public override MenuComponent GetChild(int i)
{
throw new NotImplementedException();
}

public override void Add(MenuComponent menucomponent)
{
throw new NotImplementedException();
}

public override void Remove(MenuComponent menucomponent)
{
throw new NotImplementedException();
}
}

public class Menu : MenuComponent
{
ArrayList menuComponents = new ArrayList();
private string name;
private string description;

public Menu(string name, string description)
{
this.name = name;
this.description = description;
}

public override void Add(MenuComponent menucomponent)
{
menuComponents.Add(menucomponent);
return;
}

public override void Remove(MenuComponent menucomponent)
{
menuComponents.Remove(menucomponent);
}

public override string GetName()
{
return name;
}

public override string GetDescription()
{
return description;
}

public override void Print()
{

Console.Write("--"+GetName());
Console.WriteLine("," + GetDescription());

IEnumerator enumerator = menuComponents.GetEnumerator();
while (enumerator.MoveNext())
{
MenuComponent menuComponent = (MenuComponent)enumerator.Current;
menuComponent.Print();
}
}
public override MenuComponent GetChild(int i)
{
throw new NotImplementedException();
}
public override double GetPrice()
{
throw new NotImplementedException();
}

public override bool IsVegetarian()
{
throw new NotImplementedException();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: