Add another layer of abstract class to make public interface clear.