当前位置: 首页 > news >正文

设计模式——设计模式原则

设计模式

设计模式原则

单一职责原则(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 {@Overridepublic void definition() {System.out.println("访客用户,视频480p超清");}@Overridepublic void advertisement() {System.out.println("访客用户,视频有广告");}
    }/*** @Description: 普通用户* @Author: pupil* @Date: 2024/06/21 下午 8:19*/
    public class OrdinaryVideoUserServiceImpl implements IVideoUserService {@Overridepublic void definition() {System.out.println("普通用户,视频720p超清");}@Overridepublic void advertisement() {System.out.println("普通用户,视频有广告");}
    }/*** @Description: VIP用户* @Author: pupil* @Date: 2024/06/21 下午 8:20*/
    public class VipVideoUserServiceImpl implements IVideoUserService {@Overridepublic void definition() {System.out.println("VIP用户,视频1080p蓝光");}@Overridepublic 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();}
    }
    

    结果:

    请添加图片描述

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

请添加图片描述

接口和类是实现关系

其他原则待完成…

相关文章:

  • [Django学习]查询过滤器(lookup types)
  • SpringSecurity实战入门——授权
  • 【实战】Spring Cloud Stream 3.1+整合Kafka
  • Python学习路线
  • vue3父组件获取子组件的实例对象
  • Ollama部署大模型并安装WebUi
  • 抽象类和接口有什么区别?
  • reidis的内存回收和内存淘汰策略
  • Android C++系列:C++最佳实践2抽象类
  • Spring Boot 增删改查(mybatis-plus)
  • MSPM0G3507——PWM
  • Elasticsearch Range 查询:范围搜索
  • ARM32常见指令
  • JAVA学习笔记DAY11——Java 与 Spring框架发展
  • Scala 中的匿名函数
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS6 编译安装 redis-3.2.3
  • CentOS从零开始部署Nodejs项目
  • CSS 专业技巧
  • flask接收请求并推入栈
  • GitUp, 你不可错过的秀外慧中的git工具
  • isset在php5.6-和php7.0+的一些差异
  • java 多线程基础, 我觉得还是有必要看看的
  • Java到底能干嘛?
  • markdown编辑器简评
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • VUE es6技巧写法(持续更新中~~~)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 码农张的Bug人生 - 初来乍到
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深度学习在携程攻略社区的应用
  • 算法-图和图算法
  • 赢得Docker挑战最佳实践
  • Java数据解析之JSON
  • zabbix3.2监控linux磁盘IO
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C11) 泛型表达式
  • (Java数据结构)ArrayList
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十一)图像的罗伯特梯度锐化
  • (转)iOS字体
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .Net语言中的StringBuilder:入门到精通
  • @Autowired标签与 @Resource标签 的区别
  • @font-face 用字体画图标
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [Android Pro] Notification的使用