六大设计原则之单一职责原则02

目录

1.概述

2.业务场景

3.运用设计原则前代码实现

3.1.代码实现

3.2.总结

4.运用设计原则后代码实现

4.1.代码实现

4.2.总结


1.概述

单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,是面向对象的五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因,该原则由罗伯特.C.马丁(Robert C.Martin)在《敏捷软件开发:原则,模式与实践》一书中提出。

2.业务场景

当在各类视频网站看电影,电视剧时,网站针对不同的用户类型,会在用户观看时给出不同的用户反馈:

1.访客用户,一般只可以观看480P视频,并时刻提醒用户注册会员。这表示视频业务发展需要拉客,以获取更多的新注册用户。

2.普通会员,可以观看720超清视频,但不能屏蔽视频中出现的广告。这表示视频业务发展需要盈利。

3.VIP会员(属于付费用户),既可以观看1080P蓝光视频,又可以关闭或跳过广告。

3.运用设计原则前代码实现

3.1.代码实现

VideoUserService.java 

package chapter02.srp;
public class VideoUserService {
    public void serveGrade(String userType){
        if("VIP会员".equals(userType)){
            System.out.println("VIP会员,视频1080P蓝光");
        }else if("普通会员".equals(userType)){
            System.out.println("普通会员,视频720P超清");
        }else if("访客用户".equals(userType)){
            System.out.println("访客用户,视频480P高清");
        }
    }
}

测试用例

@Test
public void test_serveGrade(){
    VideoUserService service = new VideoUserService();
    service.serveGrade("VIP会员");
    service.serveGrade("普通会员");
    service.serveGrade("访客用户");
}

3.2.总结

1.对于简单的或者几乎不需要迭代的功能,这种实现也未尝不可。但如果面对频繁迭代的业务需求,这样的代码结构就很难支撑系统迭代,每一次需求的实现都可能会影响到其他逻辑,给整个接口服务带来不可控的风险。

4.运用设计原则后代码实现

4.1.代码实现

IVideoUserService.java

package chapter02.srp.design;
public interface IVideoUserService {
    //视频清晰级别:480P,720P,1080P
    void definition();
    //广告播放方式:无广告,有广告
    void advertisement();
}

GuestVideoUserService.java

package chapter02.srp.design;
public class GuestVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("访客用户,480高清视频");
    }
    @Override
    public void advertisement() {
        System.out.println("访客用户,视频有广告");
    }
}

OrdinaryVideoUserService.java

package chapter02.srp.design;
public class OrdinaryVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("普通会员,720超清视频");
    }
    @Override
    public void advertisement() {
        System.out.println("普通会员,视频有广告");
    }
}

VipVideoUserService.java

package chapter02.srp.design;
public class VipVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("VIP会员,1080蓝光视频");
    }
    @Override
    public void advertisement() {
        System.out.println("VIP会员,视频无广告");
    }
}

测试用例

@Test
public void test_VideoUserService(){
    //访客用户
    IVideoUserService guest = new GuestVideoUserService();
    guest.definition();
    guest.advertisement();
    //普通会员
    IVideoUserService ordinary = new OrdinaryVideoUserService();
    ordinary.definition();
    ordinary.advertisement();
    //VIP会员
    IVideoUserService vip = new VipVideoUserService();
    vip.definition();
    vip.advertisement();
}

4.2.总结

1.每种用户对应的服务职责都有对应的类实现,不会互相干扰。当某一类用户需要添加新的运营规则是,操作起来也非常方便。

2.利用单一职责原则的代码优化后,现在每个类都只负责自己的用户行为。后续无论扩展新的功能还是需要在某个时刻修改某个用户行为类,都可以非常方便地开发和维护。

3.在项目开发的过程中,尽可能保证接口的定义,类的实现以及方法开发保持单一职责,对项目后期的迭代和维护会有很大的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值