设计模式原则——单一职责原则(SPS)

news2024/10/6 14:33:57

设计模式原则

设计模式示例代码库地址:

https://gitee.com/Jasonpupil/designPatterns

单一职责原则(SPS):

  • 又称单一功能原则,面向对象五个基本原则(SOLID)之一
  • 原则定义:一个类应该只有一个发生变化的原因
  • 使用if else进行判断实现不好维护

模式场景:视频网站

  • 存在访客用户(视频480p高清,并有广告)普通用户(视频720p超清,并有广告)VIP用户(视频1080p蓝光,没有广告)

if else处理方式示例代码:

视频用户服务类:
/**
* @Description: 视频用户服务
* @Author: pupil
* @Date: 2024/06/21 下午 8:12
*/
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高清");
      }
  }
}
测试类:
/**
 * @description:测试验证
 * @author: pupil
 * @data: 2024/06/21 下午 7:57
 */
public class ApiTest {
    public static void main(String[] args) {
        VideoUserService service = new VideoUserService();
        service.serveGrade("VIP用户");
        service.serveGrade("普通用户");
        service.serveGrade("访客用户");
    }
}
结果:

请添加图片描述

根据单一职责原则处理方式示例代码:

视频用户服务接口:
/**
* @Description: 视频用户服务接口
* @Author: pupil
* @Date: 2024/06/21 下午 8:17
*/
public interface IVideoUserService {
  void definition();

  void advertisement();
}
访客用户类:
/**
 * @Description: 访客用户
 * @Author: pupil
 * @Date: 2024/06/21 下午 8:18
 */
public class GuestVideoUserServiceImpl implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("访客用户,视频480p超清");
    }

    @Override
    public void advertisement() {
        System.out.println("访客用户,视频有广告");
    }
}
普通用户类:
/**
 * @Description: 普通用户
 * @Author: pupil
 * @Date: 2024/06/21 下午 8:19
 */
public class OrdinaryVideoUserServiceImpl implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("普通用户,视频720p超清");
    }

    @Override
    public void advertisement() {
        System.out.println("普通用户,视频有广告");
    }
}
VIP用户:
/**
 * @Description: VIP用户
 * @Author: pupil
 * @Date: 2024/06/21 下午 8:20
 */
public class VipVideoUserServiceImpl implements IVideoUserService {
    @Override
    public void definition() {
        System.out.println("VIP用户,视频1080p蓝光");
    }

    @Override
    public void advertisement() {
        System.out.println("VIP会员,视频无广告");
    }
}
测试类:
/**
 * @Description: 测试验证
 * @Author: pupil
 * @Date: 2024/06/21 下午 8:24
 */
public class ApiTest {
    public static void main(String[] args) {
        IVideoUserService guest = new GuestVideoUserServiceImpl();
        guest.definition();
        guest.advertisement();
        System.out.println("=================================");
        IVideoUserService ordinary= new OrdinaryVideoUserServiceImpl();
        ordinary.definition();
        ordinary.advertisement();
        System.out.println("=================================");
        IVideoUserService vip = new VipVideoUserServiceImpl();
        vip.definition();
        vip.advertisement();
    }
}
结果:

请添加图片描述

根据单一职责原则的示例类图:

请添加图片描述
接口和类是实现关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习工具jupyter创建并检测pytorch环境以及安装工具包

1. 前言 确保已经安装Python和anaconda(anaconda一般自带jupyter)。然后创建一个jupyter环境,查看启动后的new有没有环境选项。 如果遇到了EnvironmentLocationNotFound:Not such a environment。说明conda环境安装位置有问题,往…

Qt6 windows10下悬浮按钮栏实现

打王者荣耀的时候,你是否有看到中间的按钮是悬浮在屏幕的左右侧,以及中下位置,背景则是一个播放着视频的画面。 从程序的角度来看,它就是实现了一个悬浮按钮栏的功能。当然了,你也可以做成悬浮列表,悬浮下拉框,悬浮xxx等控件。 这里,我们实现在Windows的版本。手机版…

Vue45 scope

scope 限制css的作用范围 用法 <template><div class"demo"><h2 >学生姓名&#xff1a;{{name}}</h2><h2>学生性别&#xff1a;{{sex}}</h2></div> </template><script>export default {name:Student,data…

240624_昇思学习打卡-Day6-张量Tensor

240624_昇思学习打卡-Day6-张量Tensor 今儿扭头回来看看基础&#xff0c;看看最基本的数据结构&#xff0c;张量&#xff08;Tensor&#xff09;。 张量和数组、矩阵非常相似。是MindSpore网络运算中的基本数据结构&#xff0c;本文主要介绍张量和稀疏张量的属性及用法。 文章…

提示词绕过大模型安全限制

大模型安全绕过策略 简介 本文使用简单的提示词&#xff0c;可以在所有场景中实现针对某开源模型的安全策略绕过。 glm-4-9b-chat 的安全措施还有待完善。 上一代的6b比这一代的9B&#xff0c;要安全&#xff1b;上一代的6B大模型这一招没有用。 正常对话 若在下述正常互动…

小程序安卓手机点击uni-data-select 下拉框选择器会出现蓝色阴影

解决方法&#xff1a;在导入的包中找到uni-data-select.vue&#xff0c;接着找到.uni-stat__select样式&#xff0c;把cursor: pointer去掉。 如果出现穿透问题&#xff0c;uni-select__selector的z-index加高&#xff0c;默认是2。

基于Istio服务网格的熔断限流实现

在微服务架构的宏大图景中&#xff0c;Istio服务网格如同一位精巧的交通指挥官&#xff0c;它不仅确保了服务间通信的顺畅无阻&#xff0c;还通过先进的熔断与限流机制&#xff0c;为系统的稳定性筑起了一道坚固的防线。接下来&#xff0c;让我们一窥Istio如何在不改动服务代码…

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六)

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞&#xff08;六十六&#xff09; 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装&#xff0c;我们进入 ThinkPHP漏洞环境&#xff0c;可以 cd ThinkPHP&#xff0c;然后通过 …

Arduino IDE下载、安装和配置

文章开始先把我自己网盘里的安装包分享给大家&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1cb2_3m0LnuSKLnWP_YoWPw?pwdwwww 提取码&#xff1a;wwww 里面一个是Arduino IDE的安装包&#xff0c;另一个是即将发布的版本。 第一个安装包打开直接按照我的步骤安装就…

AI视频教程下载-数据分析中的提示工程:Python、Pandas、ChatGPT

Prompt Engineering for Data Analysis Python, Pandas, ChatGPT ChatGPT与Python&#xff1a;无需编程。借助ChatGPT、Python、Pandas及提示工程进行数据分析与数据可视化 "利用Python、Pandas和ChatGPT进行数据分析的提示工程"是一门开创性的课程&#xff0c;它通…

Harris角点检测原理及其在python-opencv的调用

文章目录 原理测试 原理 Harris 角点检测的基本思路如下&#xff1a;考虑一个局部的区域&#xff0c;将其作为一个窗口四处移动&#xff0c;若窗口灰度发生了较大的变化&#xff0c;那么&#xff0c;就认为窗口内存在角点&#xff0c;否则窗口内就不存在角点。 对于图像 I ( …

FruitJuice for Mac:智能优化电池寿命,Mac持久续航不再难!

FruitJuice for Mac 是一款专为Mac用户设计的电池优化管理工具。它拥有智能的电池健康监测功能&#xff0c;可以实时显示Mac电池的当前状态&#xff0c;并提供个性化的优化建议&#xff0c;帮助用户更好地管理电池使用。 通过FruitJuice&#xff0c;Mac用户可以轻松查看电池的…

240621_昇思学习打卡-Day3-余弦退火+周期性重启+warm up

240621_昇思学习打卡-Day3-余弦退火周期性重启warm up 先展示一个完整的余弦退火周期性重启warm up调整学习率的流程&#xff08;横轴为epoch&#xff0c;纵轴为学习率&#xff09;&#xff1a; 我们换一个收敛较慢的图进行详细说明&#xff1a; Warm up 在神经网络刚开始训练…

若依框架下拉单选框根据js动态加载,如何使select2的下拉搜素功能同时生效(达到select下拉框的样式不变的效果)

直接上代码&#xff0c;不废话 $(select[name"sealType"]).change(function (event) {let value event.target.valuequeeryDeptListBySealType(value)})// 获取科目信息function queeryDeptListBySealType(value){$.ajax({type: "post",url: prefix &quo…

【Linux】Linux基础开发工具(yum)

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便…

__FILE__ 一个非常实用的宏

经常在VS和QtCreator这两个开发环境之间切换的同志肯定会发现这两个开发环境生成的可执行程序的文件路径不一样&#xff0c;VS是在项目文件目录里面&#xff0c;而qt creator是在和项目文件夹同一目录下。如下图所示&#xff1a; QtCreator: VS: 这就导致了一个问题,若要获取项…

面向对象的编程思想

面向对象的编程思想 一、什么是面向对象&#xff1f; 面向对象编程的核心思想是把构成问题的各个事物分解成各个对象&#xff0c;建立对象的目的不是为了完成一个步骤&#xff0c;而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位&#xff0…

如何开发、使用 Starter

开发 第一步&#xff1a;创建starter工程hello-spring-boot-starter并配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchem…

达梦(DM8)数据库表空间的备份与还原(联机备份) 四

一、表空间的备份 1、备份表空间的命令操作 backup tablespace main backupset /home/dmdba/dmdata/DAMENG/bak/full_back_01 ; 2、检查表空间的备份文件 select sf_bakset_check(disk,/home/dmdba/dmdata/DAMENG/bak/full_back_01); 二、表空间的还原 1、修改表空间位脱机…

[MySql]两阶段提交

文章目录 什么是binlog使用binlog进行恢复的流程 什么是redolog缓冲池redologredolog结构 两阶段提交 什么是binlog binlog是二进制格式的文件&#xff0c;用于记录用户对数据库的修改&#xff0c;可以作用于主从复制过程中数据同步以及基于时间点的恢复&#xff08;PITR&…