单一职责原理

定义:又称为单一功能原则,是面向对象的五个基本原则之一。它规定一个类应该只有一个发生变化的原因,如果需要开发的一个功能需求不是一次性的,且随着业务的发展不断变化而变化,那么当一个class类负责超过两个以上的职责时,就在需求不断迭代下,就会出现难以维护、不好扩展、测试难度加大和上限风险高等问题

所谓的职责就是指类变化的原因,也就是业务需求。

代码实现:

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高清");
        }
    }

    /**
     * 如上实现的代码逻辑非常的简单 ,暂时也不会出现什么问题,但是这一个类里面包含着多个不同的行为,也就是用户的等多种职责。如果在这样的类上继续扩展功能或添加逻辑就会显得非常的臃肿
     */
    public static void main(String[] args) {
        VideoUserService service = new VideoUserService();
        service.serveGrade("VIP会员");
        service.serveGrade("普通会员");
        service.serveGrade("访客用户");
    }

    /**
     *上面的实现方式是在一个if else中实现的,所以在调用方法的时候是所有的职责用户都使用一个方法实现,作为程序的调用入口
     * 对于简单的或者几乎不需要迭代的功能这种实现也未尝不可。
     * 但是如果面对的是频繁跌单的业务需求,这样的代码就很难支撑系统的迭代。每一次的需求的实现都可能会影响其他的逻辑,给整个接口服务带来不可控制的风险
     */
}
public interface IVideoUserService {

    //视屏清晰级别 480 720 1080
    void definition();

    //广告的播放方式:有广告 无广告
    void advertisement();

    /**
     * 定义出一个上层的接口,统一定义需要实现的功能,包括视屏的清晰度接口 广告播放方式的接口
     * 三种用户就可以分别实现自己的服务类,做到职责的统一
     */
public class DanyiTest {
    public static void main(String[] args) {

        /**
         * 利用单一原则优化后的代码,现在每个类都只负责自己的用户的行为,后续如果无论扩展新 的功能呢还是需要在某个时刻修改用户的某个行为,都可以非常方便的开发
         * 在项目的开发中尽可能的保证接口的定义、类的实现与以及方法的开发保持单一职责。
         */

        //访客用户
        GuestVideoUserService guestVideoUserService = new GuestVideoUserService();
        guestVideoUserService.definition();
        guestVideoUserService.advertisement();

        //普通会员
        OrdinaryVideoUserService ordinary = new OrdinaryVideoUserService();
        ordinary.advertisement();
        ordinary.definition();

        //vip用户
         VipVideoUserService vip = new VipVideoUserService();
         vip.advertisement();
         vip.definition();
         vip.danmu();
    }
}
public class GuestVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("访客用户 视屏的清晰度为480p");
    }

    @Override
    public void advertisement() {
        System.out.println("访客用户,视屏有广告");
    }
}
public class OrdinaryVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("普通会员,视屏清清晰度720p");
    }

    @Override
    public void advertisement() {
        System.out.println("普通会员,播放视屏有广告");

    }
}
public class VipVideoUserService implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("VIP用户,视屏清晰度1080p");
    }

    @Override
    public void advertisement() {
        System.out.println("vip用户 无广告");
    }

    public void danmu(){
        System.out.println("这个是VIP用户自己特有的功能,发送弹幕");
    }

    /**
     *
     * 综上 每种用户对应的服务队友对应的类的实现,互相不会干扰,当某一类用户需要添加新的运营规则时操作起来也非常方便
     */
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值