package designPatterns;import java.util.*;abstract class Equipment ...{ private String name; public abstract double netPrice(); public abstract double discountPrice(); public boolean add(Equipment equipment) ...{ return false; } public boolean remove(Equipment equipment) ...{ return false; } public Iterator iter() ...{ return null; } public Equipment(final String name) ...{ this.name = name; }}class Disk extends Equipment ...{ public Disk(String name) ...{ super(name); } public double netPrice() ...{ return 1.; } public double discountPrice() ...{ return .5; }}abstract class CompositeEquipment extends Equipment ...{ private int i = 0; private List equipment = new ArrayList(); public CompositeEquipment(String name) ...{ super(name); } public boolean add(Equipment equipment) ...{ this.equipment.add(equipment); return true; } public double netPrice() ...{ double netPrice = 0.; Iterator iter = equipment.iterator(); while (iter.hasNext()) netPrice += ((Equipment) iter.next()).netPrice(); return netPrice; } public double discountPrice() ...{ double discountPrice = 0.; Iterator iter = equipment.iterator(); while (iter.hasNext()) discountPrice += ((Equipment) iter.next()).discountPrice(); return discountPrice; } public Iterator iter() ...{ return equipment.iterator(); } public boolean hasNext() ...{ return i < equipment.size(); } public Object next() ...{ if (hasNext()) return equipment.get(i++); else throw new NoSuchElementException(); }}class Chassis extends CompositeEquipment ...{ public Chassis(String name) ...{ super(name); } public double netPrice() ...{ return 1. + super.netPrice(); } public double discountPrice() ...{ return .5 + super.discountPrice(); }}class Cabinet extends CompositeEquipment ...{ public Cabinet(String name) ...{ super(name); } public double netPrice() ...{ return 1. + super.netPrice(); } public double discountPrice() ...{ return .5 + super.discountPrice(); }}public class CompositeTest ...{ public static void main(String[] args) ...{ Cabinet cabinet = new Cabinet("Tower"); Chassis chassis = new Chassis("PC Chassis"); cabinet.add(chassis); chassis.add(new Disk("10 GB")); System.out.println("netPrice=" + cabinet.netPrice()); System.out.println("discountPrice=" + cabinet.discountPrice()); }}