turn interface into abstract class to allow separation of patterns and check methods.