1、软件体系结构Beijing Jiaotong UniversityZhenyan JiISP:Interface-Segregation Principle接口分离原则ISP -接口分离原则ISP原则解决“胖”接口问题。 客户程序不应该被迫依赖其不使用的方法。接口分离原则:消除多职责的类(接口不内聚的类)将“胖”接口分解成多个接口,每个接口服务特定类型的客户程序。ISP 例子1例子 II例子 II例子 II例子 III例子 III例子 IV/ interface segregation principle - bad exampleinterface IWorker public void w
2、ork();public void eat();class Worker implements IWorkerpublic void work() / .working public void eat() / . eating in launch break例子 IVclass SuperWorker implements IWorkerpublic void work() /. working much more public void eat() /. eating in launch break class Manager IWorker worker;public void setWo
3、rker(IWorker w) worker=w; public void manage() worker.work(); 例子 IV/ interface segregation principle - good exampleinterface IWorker extends Feedable, Workable interface IWorkable public void work(); interface IFeedable public void eat(); class Worker implements IWorkable, IFeedablepublic void work(
4、) / .working public void eat() /. eating in launch break 例子 IVclass Robot implements IWorkablepublic void work() / .working class SuperWorker implements IWorkable, IFeedablepublic void work() /. working much more public void eat() /. eating in launch break class Manager Workable worker;public void setWorker(IWorkable w) worker=w; public void manage() worker.work(); 结论当”胖“类的一个职责发生变化时,其所有客户程序都会受到影响。”胖“类会导致类中的多个职责耦合。客户程序不再依赖其不调用的方法,并且客户程序彼此独立,不再因为“胖”类耦合在一起。”胖“类的接口应该分解为特定于不同客户程序的多个接口。练习请举一个违反ISP的例子并解释原因。如何修改它以符合ISP?