采用接口类的方式，将易变化的部分从原来的类中分离，并使用了多态