扩展开放,修改关闭,方便解耦,增强软件复用性,是最重要的原则。面向接口编程常利用这点,如图,Javacourse原来实现了getPrice,现需要实现一个获取折扣价格,通常不修改原接口和当前实现,而是扩展出一个新的子类,如需调用getDiscountPrice,只需要引用该新的子类。
在spring中,IOC和DI就体现了开闭原则的思想,通过IOC将所有实现类的创建交给spring,通过DI(xml配置或注解)选择性的将实现类注入。
上层模块不应依赖底层模块,二者都应依赖其抽象,针对接口编程,不要针对实现。如图,Test为上层模块,Geely为下层模块,上层不依赖下层实现,二者都依赖于接口实现。
一个接口/类/方法只应负责一个功能。这个原则实际开发中很难把控,受业务开发周期、类之间的依赖。
接口内部方法定义应注意一定粒度,太大,导致实现类会废置一些方法,太小,导致接口数量多。
类只应知道朋友类的相关实现,而尽可能少的知道不属于自己职责的类实现。如图,Boss调用Leader的checkNumofCourses,但自己不与Course有任何关系。
与开闭原则类似,新增加的功能不应直接写在已有的实现类中,而是通过扩展基类的实现类来完善新的方法。
提交评论