Composite Pattern
Pros
- e
Cons
- e
Example Explanation
[UML]
import java.util.ArrayList;
import java.util.List;
class Main {
public static void main(String[] args) {
BattleArea zoneOne = new Zone(60);
System.out.println("zoneOne's area: "+zoneOne.getTotalArea());
//zoneOne's area: 60
BattleArea zoneTwo = new Zone(35);
System.out.println("zoneTwo's area: "+zoneTwo.getTotalArea());
//zoneTwo's area: 35
Area dungeonOne = new Dungeon(15);
System.out.println("dungeonOne's area: "+dungeonOne.getTotalArea());
//dungeonOne's area: 15
zoneTwo.add( dungeonOne );
System.out.println("zoneTwo added dungeonOne");
System.out.println("zoneTwo's area: "+zoneTwo.getTotalArea());
//zoneTwo added dungeonOne
//zoneTwo's area: 50
zoneOne.add( zoneTwo );
System.out.println("zoneOne added zoneTwo");
System.out.println("zoneOne's area: "+zoneOne.getTotalArea());//110
//zoneOne added zoneTwo
//zoneOne's area: 110
}
}
interface Area{
public int getTotalArea();
}
abstract class BattleArea implements Area{
private List<Area> areas = new ArrayList<Area>();
protected int totalArea;
public void add(Area z){ areas.add( z ); }
public void remove(Area z){ areas.remove( z ); }
public int getTotalArea(){
int total = totalArea;
for (Area area : areas) {
total += area.getTotalArea();
}
return total;
}
}
class Zone extends BattleArea implements Area{
public Zone(int totalArea){
this.totalArea = totalArea;
}
}
class Dungeon implements Area{
private int totalArea;
public Dungeon(int totalArea){
this.totalArea = totalArea;
}
public int getTotalArea(){ return totalArea; }
}
Extra Resources