设计模式| 单一职责原则&接口隔离原则

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/qq_24672657/article/details/83018329

记录学习设计模式的过程

#单一职责原则

概念

  • 定义:不要存在多于一个导致类变更的原因
  • 一个类、接口、方法只负责一项职责
  • 优点:、、

案例

单一职责原则很简单,一个方法 一个类只负责一个职责,各个职责的程序改动,不影响其它程序。

这个比较容易理解,就举个一个平常会碰到的情况。

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

猜你喜欢

转载自blog.csdn.net/qq_24672657/article/details/83018329