组合模式
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(); } }
相关文章推荐
- Android开发工具全集
- hud-1754-I Hate It(线段树)
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- loginUtil
- Visual Studio中的文件类型(sln vcproj suo user ncb)
- 八皇后问题及其推广
- 数字图像处理10--基于特征提取的拼接方法
- RHCE 学习笔记(12) 归档压缩和文件传递
- 周爱民:真正的架构师是没有title的(图灵访谈)
- 贪心算法,递归算法,动态规划算法比较与总结
- 机器学习算法之决策树(三)
- C#使用iTextSharp打印PDF
- Windows Server 2008 R2 RDS在线激活
- ubuntu 环境下开发android 程序,识别手机步骤。
- jquery ui dialog替代confirm实例分析
- leetcode之Remove Linked List Elements
- 开源控件库
- 语音识别书籍
- Android之数据持久化三(sqllite数据库)二
- 购买价格与商品价格和SKU价格的关系