记录学习设计模式的过程
#单一职责原则
概念 定义:不要存在多于一个导致类变更的原因一个类、接口、方法只负责一项职责优点:、、 案例单一职责原则很简单,一个方法 一个类只负责一个职责,各个职责的程序改动,不影响其它程序。
这个比较容易理解,就举个一个平常会碰到的情况。
package com.dsdj.design.principle.singleresponsibility;/** * @ClassName TestService * @Description TODO * @Author dsdj * @Date 2018/10/9 下午9:36 * @Version 1.0 **/public class TestService { public void getPrice(double price,String type){ if ("肉类".equals(type)){ System.out.println("价格是"+price); } if ("鸡肉".equals(type)){ System.out.println("价格是"+price); } }}这是定义的一个获取价格的类。
package com.dsdj.design.principle.singleresponsibility;/** * @ClassName Test * @Description TODO * @Author dsdj * @Date 2018/10/11 下午8:16 * @Version 1.0 **/public class Test { public static void main(String[] args) { TestService testService = new TestService(); testService.getPrice(12,"肉类"); testService.getPrice(23.2,"鸡肉"); }}这是测试类
根据单一职责原则,我们进行如下的重构
将于鸡肉有关的职责作为一个类
package com.dsdj.design.principle.singleresponsibility;/** * @ClassName ChickenService * @Description TODO * @Author dsdj * @Date 2018/10/11 下午8:21 * @Version 1.0 **/public class ChickenService { public void getPrice(double price){ System.out.println("猪肉价格是"+price); }}将与肉类有关的职责作为一个类
package com.dsdj.design.principle.singleresponsibility;/** * @ClassName PorkService * @Description TODO * @Author dsdj * @Date 2018/10/11 下午8:20 * @Version 1.0 **/public class PorkService { public void getPrice(double price){ System.out.println("猪肉价格是"+price); }}测试类在使用的时候就明确职责了
package com.dsdj.design.principle.singleresponsibility;/** * @ClassName Test * @Description TODO * @Author dsdj * @Date 2018/10/11 下午8:16 * @Version 1.0 **/public class Test { public static void main(String[] args) {// TestService testService = new TestService();// testService.getPrice(12,"肉类");// testService.getPrice(23.2,"鸡肉"); // 重构之后 new ChickenService().getPrice(12.45); new PorkService().getPrice(34.2); }} 接口隔离原则 概念定义:用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口
一个类对一个类的依赖应该建立在最小的接口上
建立单一的几口,不要建立庞大臃肿的接口
尽量细化接口,接口中的方法尽量少
适度原则,一定要适度
优点:高内聚,低耦合、可读性
理解客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 这个原则很简单,对于java等语言来说,B和D类依赖“接口I“(图1),但是B并没有使用方法4、5,D没有使用方法2、3,但是因为依赖接口I,所以也需要定义并不使用的方法。 从前端角度来说,一个公共类它可能被不同的其它类引用,但是每个类只需要用到公共类的其中一个方法,但是却需要把公共类全部引入,这样就显得太臃肿。
所以通过把一个大接口拆分成几个小接口,可以使代码更精准,引用更灵活。
总结 单一职责原则是对类的约束接口隔离原则是对抽象的约束设计模式的使用要适度,不能过度使用,要结合实际的开发情况。参考:https://yq.aliyun.com/articles/642508