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

results matching ""

    No results matching ""