博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之组合模式
阅读量:4068 次
发布时间:2019-05-25

本文共 3667 字,大约阅读时间需要 12 分钟。

组合模式:将对象聚合成树形结构来表现“整体/部分”的层次结构。

组合模式能让客户以一致的方式来处理个别对象以及对象组合。
也就是我们可以忽略对象组合与个体对象之间的差别

一、餐厅菜单项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、代码

在这里插入图片描述

1、超类MenuComponent

public abstract class MenuComponent {	public String getName() {		return "";	}	public String getDescription() {		return "";	}	public float getPrice() {		return 0;	}	public boolean isVegetable() {		return false;	}	public abstract void print();	public Iterator getIterator() {		return new NullIterator();	}}

2、CakeHouseMenu

public class CakeHouseMenu extends MenuComponent {	private ArrayList
menuItems; public CakeHouseMenu() { menuItems = new ArrayList
(); addItem("KFC Cake Breakfast", "boiled eggs&toast&cabbage", true, 3.99f); addItem("MDL Cake Breakfast", "fried eggs&toast", false, 3.59f); addItem("Stawberry Cake", "fresh stawberry", true, 3.29f); addItem("Regular Cake Breakfast", "toast&sausage", true, 2.59f); } private void addItem(String name, String description, boolean vegetable, float price) { MenuItem menuItem = new MenuItem(name, description, vegetable, price); menuItems.add(menuItem); } public Iterator getIterator() { return new ComposeIterator(menuItems.iterator()); } @Override public void print() { System.out.println("****This is CakeHouseMenu****"); };}

3、DinerMenu

public class DinerMenu extends MenuComponent {	private final static int Max_Items = 5;	private int numberOfItems = 0;	private MenuComponent[] menuItems;	public DinerMenu() {		menuItems = new MenuComponent[Max_Items];		addItem("vegetable Blt", "bacon&lettuce&tomato&cabbage", true, 3.58f);		addItem("Blt", "bacon&lettuce&tomato", false, 3.00f);		addItem("bean soup", "bean&potato salad", true, 3.28f);		addItem("hotdog", "onions&cheese&bread", false, 3.05f);		addSubMenu(new SubMenu());	}	private void addItem(String name, String description, boolean vegetable, float price) {		MenuItem menuItem = new MenuItem(name, description, vegetable, price);		if (numberOfItems >= Max_Items) {			System.err.println("sorry,menu is full!can not add another item");		} else {			menuItems[numberOfItems] = menuItem;			numberOfItems++;		}	}		private void addSubMenu(MenuComponent mMenuComponent) {		if (numberOfItems >= Max_Items) {			System.err.println("sorry,menu is full!can not add another item");		} else {			menuItems[numberOfItems] = mMenuComponent;			numberOfItems++;		}	}}

4、SubMenu

public class SubMenu extends MenuComponent {	private ArrayList
menuItems; public SubMenu() { menuItems = new ArrayList
(); addItem("Apple Cookie", "Apple&candy&Cookie", true, 1.99f); addItem("Banana Cookie", "Banana&candy&Cookie", false, 1.59f); addItem("Orange Cookie", "Orange&Cookie", true, 1.29f); } private void addItem(String name, String description, boolean vegetable,float price) { MenuItem menuItem = new MenuItem(name, description, vegetable, price); menuItems.add(menuItem); } public Iterator getIterator() { return new ComposeIterator(menuItems.iterator()); } @Override public void print() { System.out.println("****This is SubMenu****"); }; }

5、MenuItem

public class MenuItem extends MenuComponent{	private String name,description;	private boolean vegetable;	private float price;	public MenuItem(String name,String description,boolean vegetable,float price){		this.name=name;		this.description=description;		this.vegetable=vegetable;		this.price=price;		}	@Override	public String getName()	{		return name;	}	@Override	public String getDescription()	{		return description;	}	@Override	public float getPrice()	{		return price;	}	@Override	public boolean  isVegetable()	{		return vegetable;	}	@Override	public void print() {		System.out.println(getName() + "***" + getPrice() + "***" + getDescription());	}}
你可能感兴趣的文章
人人都会变老
查看>>
oracle connect by用法
查看>>
Oracle 树操作(select…start with…connect by…prior)
查看>>
maven struts2中,使用ModelDriven
查看>>
通过web.xml传递初始参数
查看>>
过滤器与拦截器
查看>>
maven 下成功搭建hibernate
查看>>
maven hibernate 实现对mysql简单的CRUD操作
查看>>
Java 线程池学习
查看>>
j2ee中的listener、 filter、servlet 加载顺序及其详解
查看>>
j2ee中web.xml中配置listener
查看>>
web.xml中load-on-startup的作用
查看>>
MySQL导入sql 文件的5大步骤
查看>>
释放MySQL ibdata1文件的空间
查看>>
is not in the sudoers file. This incident will be reported.
查看>>
win7 Centos 双系统的时间问题
查看>>
CentOs安装无线网卡后,一段时间后不用,网络自动断开的解决办法
查看>>
Centos 成功安装NTFS-3G
查看>>
Linux下tar.xz结尾的文件的解压方法
查看>>
yum install vlc
查看>>