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

Posted 南淮北安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搞定单一职责的设计模式一篇文章就够了!!!相关的知识,希望对你有一定的参考价值。

一、定义

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

如果要开发的功能需求,不是一次性,会随着业务的发展不断更新变化,也就是一个 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();
    }

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

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

以上是关于搞定单一职责的设计模式一篇文章就够了!!!的主要内容,如果未能解决你的问题,请参考以下文章

搞定里式替换原则的设计模式一篇文章就够了!!!

搞定设计模式之工厂模式一篇文章就够了!!!

搞定设计模式之接口隔离原则一篇文章就够了!!!

搞定设计模式之迪米特法则一篇文章就够了!!!

搞定开闭原则的设计模式一篇文章就够了!!!

搞定 WeakHashMap 的工作原理一篇文章就够了!!!