组合模式——Head First Design Patterns
来源:互联网 发布:新闻资讯软件下载 编辑:程序博客网 时间:2024/06/06 10:03
定义:组合模式将对象组合成树形结构以表示“部分—整体”的层次关系,这使得使用者处理单个对象和组合对象时具有一致性
使用场景:当单个对象和组合对象需要对外提供类似的接口时
类图:
代码样例:
package headfirst.composite.menu;import java.util.Iterator;import java.util.ArrayList;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 getChild(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();}}}
package headfirst.composite.menu;import java.util.*;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 getDescription() {throw new UnsupportedOperationException();}public double getPrice() {throw new UnsupportedOperationException();}public boolean isVegetarian() {throw new UnsupportedOperationException();} public void print() {throw new UnsupportedOperationException();}}
package headfirst.composite.menu;import java.util.Iterator;import java.util.ArrayList;public class MenuItem extends MenuComponent {String name;String description;boolean vegetarian;double price; public MenuItem(String name, String description, boolean vegetarian, double price) { this.name = name;this.description = description;this.vegetarian = vegetarian;this.price = price;} public String getName() {return name;} public String getDescription() {return description;} public double getPrice() {return price;} public boolean isVegetarian() {return vegetarian;} public void print() {System.out.print(" " + getName());if (isVegetarian()) {System.out.print("(v)");}System.out.println(", " + getPrice());System.out.println(" -- " + getDescription());}}
package headfirst.composite.menu;import java.util.Iterator; public class Waitress {MenuComponent allMenus; public Waitress(MenuComponent allMenus) {this.allMenus = allMenus;} public void printMenu() {allMenus.print();}}
优点:1)简化对外的使用方式
缺点:1)
类似的设计模式:
配套的内功心法:1)
0 0
- 组合模式——Head First Design Patterns
- 策略模式——Head First Design Patterns
- 观察者模式——Head First Design Patterns
- 装饰者模式——Head First Design Patterns
- 工厂方法模式——Head First Design Patterns
- 抽象工厂模式——Head First Design Patterns
- 单例模式——Head First Design Patterns
- 命令模式——Head First Design Patterns
- 适配器模式——Head First Design Patterns
- 门面模式——Head First Design Patterns
- 模板方法模式——Head First Design Patterns
- 迭代器模式——Head First Design Patterns
- 状态模式——Head First Design Patterns
- 代理模式——Head First Design Patterns
- 复合模式——Head First Design Patterns
- 桥接模式——Head First Design Patterns
- 中介者模式——Head First Design Patterns
- 建造者模式——Head First Design Patterns
- Javascript中function引用参数的一个小错误
- FusionCharts 2D面积图
- ruby 安装和使用 mysql2
- 题目1093:WERTYU
- poj 1101 The Game(bfs)
- 组合模式——Head First Design Patterns
- Java导出Excel工具类
- android 静默安装,含获取各种应用信息方法,根据apk获取应用信息
- 检测点3.2
- 交换两个变量的值,不使用第三个变量
- C++ 标准库迭代循环变量类型
- 摆渡木马论文
- cocos2d-x 添加中文方法
- Linux x86_64线性地址空间布局(Why Does X86_64 Not Have ZONE_HIGHMEM)