A java framework for agent based simulation using design patterns