java组合模式
2015-08-24 10:14
351 查看
模式定义
组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合
1. 组合模式让我们能用树形方式创建对象的结构,树里面包含了组合以及个别的对象
2. 使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。
组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合
UML类图
例
package composite; import java.util.Iterator; /** * Component * * @author chenhong * * */ public abstract class MenuComponent { public void add(MenuComponent menuComponent) { throw new UnsupportedOperationException(); } public void remove(MenuComponent menuComponent) { throw new UnsupportedOperationException(); } public MenuComponent getChild(int i) { throw new UnsupportedOperationException(); } public String getName() { throw new UnsupportedOperationException(); } public String getDexcription() { throw new UnsupportedOperationException(); } public double getPrice() { throw new UnsupportedOperationException(); } public void print() { throw new UnsupportedOperationException(); } public Iterator iterator() { throw new UnsupportedOperationException(); } }
package composite; /** * leaf * * @author chenhong * * */ public class MenuItem extends MenuComponent { String name; String description; double price; public MenuItem(String name, String description, double price) { this.name = name; this.description = description; this.price = price; } public String getName() { return name; } public String getDescription() { return description; } public double getPrice() { return price; } public void print() { System.out.print(" " + getName()); System.out.println("," + getPrice()); System.out.println(" ---" + getDescription()); } }
package composite; import java.util.ArrayList; import java.util.Iterator; /** * Composite * * @author chenhong * */ public class Menu extends MenuComponent { ArrayList menuComponents = new ArrayList(); String name; String description; public Menu(String name, String description) { this.name = name; this.description = description; } public void add(MenuComponent menuComponent) { menuComponents.add(menuComponent); } public void remove(MenuComponent menuComponent) { menuComponents.remove(menuComponent); } public MenuComponent getChile(int i) { return (MenuComponent) menuComponents.get(i); } public String getName() { return name; } public String getDescription() { return description; } public void print() { System.out.print("\n" + getName()); System.out.println("," + getDescription()); System.out.println("-------------------"); Iterator iterator = menuComponents.iterator(); while (iterator.hasNext()) { MenuComponent menuComponent = (MenuComponent) iterator.next(); menuComponent.print(); } } public Iterator iterator() { return menuComponents.iterator(); } }
package composite; /** * client * * @author chenhong * */ public class Waitress { MenuComponent allMenus; public Waitress(MenuComponent allMenus) { this.allMenus = allMenus; } public void printMenu() { allMenus.print(); } }
package composite; public class MenuTestDrive { public static void main(String args[]) { MenuComponent pancakeHouseMenu = new Menu("早餐厅菜单", "Breakfast"); MenuComponent dinnerMenu = new Menu("晚餐厅菜单", "dinner"); MenuComponent cafeMenu = new Menu("咖啡厅菜单", "Dinner"); MenuComponent dessertMenu = new Menu("甜品菜单", "Dessert"); MenuComponent allMenus = new Menu("所有菜单", "All menus"); allMenus.add(pancakeHouseMenu); allMenus.add(dinnerMenu); allMenus.add(cafeMenu); dinnerMenu.add(new MenuItem("鸡蛋炒饭", "鸡蛋+饭", 3.89)); dinnerMenu.add(dessertMenu); dessertMenu.add(new MenuItem("草莓派", "草莓+面粉", 1.59)); /* 此处加入更多菜单 */ Waitress waitress = new Waitress(allMenus); waitress.printMenu(); } }
模式总结
1. 组合模式让我们能用树形方式创建对象的结构,树里面包含了组合以及个别的对象2. 使用组合结构,我们能把相同的操作应用在组合和个别对象上。换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。
相关文章推荐
- Java 内存分配全面浅析
- 使用Open Flash Chart(OFC)制作图表(Struts2处理)
- Struts2使用!动态方法调用无效问题
- 深入理解Java虚拟机博客参考目录
- Servlet中的过滤器Filter详解
- bbs---之spring mvc
- java回顾4 Java基本数据类型
- 如何查看现有项目的struts和hibernate和spring版本
- 《深入分析Java Web技术内幕》读书笔记
- Java BIO、NIO、AIO 学习
- 在Struts2中使用Uploadify组件上传文件
- Spring定时任务的几种实现
- Ehcache 整合Spring 使用页面、对象缓存
- Spring Security hello world example
- springmvc整合shiro (2)
- Eclipse快捷键
- Spring学习笔记
- java基础知识回顾——泛型
- java的时间处理
- play Framework如何通过实体.find查询Date类型字段