Design Pattern Detection in Java Systems: A Dynamic Analysis Based Approach