搞定单一职责的设计模式一篇文章就够了!!!

一、定义

单一职责:单一功能,规定一个类只能有一个发生变化的原因

如果要开发的功能需求,不是一次性,会随着业务的发展不断更新变化,也就是一个 Class类负责超过一个以上的职责时,会出现难以维护,扩展等各种问题

二、示例

比如视频网站中有:

  • 匿名访客:匿名登录
  • 普通用户:实名登录
  • 付费会员:付费用户

简单功能的实现:

class VideoUserService{
    public void severGrade(String userType){
        if ("访客".equals(userType)){
            System.out.println("访客用户。。。。");
        }else if ("用户".equals(userType)){
            System.out.println("用户。。。。。。");
        }else {
            System.out.println("VIP 用户。。。。");
        }
    }
}

此时,业务功能逻辑中,一个类包含着多个不同的行为,具有多种用户职责。

此时如果在这个类中继续扩展功能或者添加逻辑,会显得非常臃肿

具体的使用:

public void test_serveGrqde(){
        VideoUserService videoUserService = new VideoUserService();
        videoUserService.severGrade("匿名访客");
        videoUserService.severGrade("普通用户");
        videoUserService.severGrade("付费会员");
    }

此时,每一个需求变更都会影响其他的逻辑

单一职责设计
针对不同的用户,分别提供实现类

此时,需要使用提供一个上层的接口类,对不同的差异化用户给出单独的实现类,拆分各自的职责边界

定义接口:

public interface IVideoUserService{
    // 视频清晰级别:480P/720P/1080P
    void definition();
    // 广告播放方式:有广告/无广告
    void adverisement();
}

不同用户实现接口,分别定义自己的职责

匿名访客:

public class GuestVideoUserService implements IVideoUserService {
    public void definition() {
        System.out.println("匿名访客。。。。。。");
    }

    public void adverisement() {
        System.out.println("匿名访客。。。。。。");
    }
}

普通用户:

public class OrdinaryVideoUserService implements IVideoUserService {
    public void definition() {
        System.out.println("普通用户。。。。。。");
    }

    public void adverisement() {
        System.out.println("普通用户。。。。。。");
    }
}

付费会员:

public class VipVideoUserService implements IVideoUserService {
    public void definition() {
        System.out.println("付费会员。。。。。。");
    }

    public void adverisement() {
        System.out.println("付费会员。。。。。。");
    }
}

具体的使用:

public void test_serveGrqde() {
        //访客用户
        IVideoUserService guest = new GuestVideoUserService();
        guest.definition();
        guest.adverisement();
        //普遍用户
        IVideoUserService ordinry = new OrdinaryVideoUserService ();
        ordinry.definition();
        ordinry.adverisement();
        //访客用户
        IVideoUserService vip = new VipVideoUserService ();
        vip.definition();
        vip.adverisement();
    }

此时,每个类都只负责自己的用户行为,后续的扩展便于维护

项目开发的过程,需要保证接口的定义,类的实现以及方法开发保证单一原则,便于项目后期的迭代

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值