六大设计原则--单一职责原则(srp)

本文通过视频网站用户分类的案例,阐述了单一职责原则的应用。原VideoService类过于臃肿,导致维护困难。通过定义VideoService接口和创建不同用户类实现,实现了职责分离,提高了代码可读性和可维护性,降低了风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

所谓的职责就是类变化的原因,也就就实际的业务需求。如果一个类有多于一个原因别改变,那么这个类的职责就有超过两个及以上的规则。而单一职责约定一个类有且仅有一个改变类的原因。在实际开发中,例如在service层,userService就只负责对用户进行操作,商品就交给goodsService处理。

2.案例

2.1.描述

视频网站用户分类

2.2.代码

public class VideoService {

    public void serveGrade(String  userType){
        if("游客".equals(userType)){
            System.out.println(userType+" 标准");
        }else if("普通".equals(userType)){
            System.out.println(userType+" 720p");
        }else if("vip".equals(userType)){
            System.out.println(userType+" 1080P");
        }
    }
}

2.3.分析

当前类有多种不同的行为,也就是有多种职责,但是如果在当前类上扩展功能或添加逻辑,代码会变得臃肿。而且在改变一个功能也会影响其他逻辑,可能会带来不可控的风险。

2.4改善

实际开发中需要不断完善用户的权限,此时我们可以定义一个上层接口,定义基本的核心功能,针对不同的用户给出单独的实现。

public interface VideoService {
    //描述
     void describe();
     //广告类型
     void advertisement();

}

实现

public class Guest implements VideoService {
    @Override
    public void describe() {
        System.out.println("游客 标准");
    }

    @Override
    public void advertisement() {
        System.out.println("有广告");
    }
}
public class Ordinary implements VideoService {
    @Override
    public void describe() {
        System.out.println("普通 480p");
    }

    @Override
    public void advertisement() {
        System.out.println("有广告");
    }
}
public class VIP implements VideoService {
    @Override
    public void describe() {
        System.out.println("VIP 1080P");
    }

    @Override
    public void advertisement() {
        System.out.println("可以跳过广告");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        VideoService user=new Guest();
        user.describe();
        user.advertisement();
        VideoService user2=new Ordinary();
        user2.describe();
        user2.advertisement();
        VideoService user3=new VIP();
        user3.describe();
        user3.advertisement();
    }
}

综上,每个用户对应的职责都有对应的类来处理,每个类都只负责自己的哦用户行为。互不干扰。当某一类型的用户需要添加一种功能时,互不影响。例如,所有的付费用户可以点播(可以在vip类中单独实现,不影响其他用户)。

3.注意事项和细节

  1. 降低类的复杂度,一个类只负责一项职责。
  1. 提高类的可读性,可维护性
  2. 降低变更引起的风险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霓乤

谢谢支持,菜鸟会继续努力..

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值