add Interface Segregation Principle