A java framework for agent based simulation based on design patterns