定义
组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
结构图
代码实现
写一个基类
public abstract class Component{
public void add(Component component){} // 添加商品
public void remove(Component component){} // 删除商品
public Component getComponent(int i){ // 获得商品
return null;
}
//商品名称
public String getName(){ // 获得商品名称
return null;
}
// 商品描述
public String getDescription(){ // 获得商品描述
return null;
}
// 商品价格
public double getPrice(){ //获得商品价格
return 0;
}
public void print(){} //打印
}
基础基类
import java.util.ArrayList;
import java.util.Iterator;
public class Commodity extends Component{
ArrayList componentList = new ArrayList<Component>(); // 存储商品项
String name; // 商品名称
String description; //商品描述
double price; // 商品价格
public Commodity(String name, String description, double price){
this.name = name;
this.description = description;
this.price = price;
}
public void add(Component component){
componentList.add(component);
}
public void remove(Component component){
componentList.remove(component);
}
public Component getComponent(int i){
return (Component) componentList.get(i);
}
public String getName(){
return name;
}
public String getDescription(){
return description;
}
public double getPrice(){
return price;
}
public void print(){
System.out.println(getName());
System.out.println("" + getDescription());
System.out.println("$" + getPrice());
System.out.println("--------------------");
Iterator iterator = componentList.iterator(); // 获取迭代器
while(iterator.hasNext()){
Component component = (Component) iterator.next();
component.print();
}
}
}
运行类
public class Main {
public static void main(String[] args) {
Component commodity = new Commodity("商品", "可以买的东西", 0); // 总商品集合
Component toy = new Commodity("玩具", "可以玩的东西", 0);
Component baby = new Commodity("娃娃", "可爱的玩具。", 1000);
Component stick = new Commodity("棍子", "危险的玩具。", 10000);
toy.add(baby); // 向玩具这个商品组合添加娃娃
toy.add(stick); // 向玩具这个商品组合添加棍子
Component food = new Commodity("食品", "可以吃的东西", 0);
Component berverage = new Commodity("饮料", "可以喝的东西", 0);
Component bread = new Commodity("面包", "可以吃的东西,面粉做的", 100);
Component coke = new Commodity("可乐", "可以喝的东西,黑色的,有气泡。", 50);
Component xuebi = new Commodity("雪碧", "可以喝的东西,白色的,有气泡。", 60);
food.add(bread); // 向食品这个商品组合添加面包
food.add(berverage); // 向食品这个商品组合添加饮料
berverage.add(coke); // 向饮料这个商品组合添加可乐
berverage.add(xuebi); // 向饮料这个商品组合添加雪碧
commodity.add(toy); // 向总商品中添加玩具
commodity.add(food); // 向总商品中添加食品
commodity.print();
}
}
运行结果:
商品
可以买的东西
$0.0
--------------------
玩具
可以玩的东西
$0.0
--------------------
娃娃
可爱的玩具。
$1000.0
--------------------
棍子
危险的玩具。
$10000.0
--------------------
食品
可以吃的东西
$0.0
--------------------
面包
可以吃的东西,面粉做的
$100.0
--------------------
饮料
可以喝的东西
$0.0
--------------------
可乐
可以喝的东西,黑色的,有气泡。
$50.0
--------------------
雪碧
可以喝的东西,白色的,有气泡。
$60.0
--------------------