• 小谈设计模式(4)—单一职责原则


    专栏介绍

    专栏地址

    link

    专栏介绍

    主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
    在这里插入图片描述

    单一职责原则

    单一职责原则(Single Responsibility Principle,SRP)是设计模式中的一项原则,它指出一个类或模块应该有且只有一个引起它变化的原因。换句话说,一个类或模块应该只负责一项职责。

    核心思想

    职责的划分

    将系统中的功能和行为划分为不同的职责,每个类或模块只负责一种相关的职责。这样可以使得类的职责更加明确和清晰,便于理解和维护。

    单一变化原则

    一个类或模块应该只有一个引起它变化的原因。如果一个类负责多种不相关的职责,那么对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。

    高内聚性

    类的内聚性指的是类内部的成员之间联系的紧密程度。遵守单一职责原则可以提高类的内聚性,使得类内部的成员相互关联度高,功能相关的代码放在同一个类中,便于理解和维护。

    低耦合性

    类之间的耦合性指的是彼此之间的依赖程度。遵守单一职责原则可以降低类之间的耦合性,使得类之间的依赖关系更加清晰和简单,减少代码的依赖和影响范围。

    核心总结

    单一职责原则的核心思想是将一个类或模块的职责限定在一个很小的范围内,使其只负责一种相关的功能或行为。这样可以保持类的高内聚性、低耦合性,提高代码的可读性、可维护性和可扩展性。
    在这里插入图片描述

    举例

    假设我们有一个图书管理系统,其中包含了图书的借阅和归还功能。我们可以将这个系统划分为以下几个类:

    图书类(Book)

    负责表示图书的属性和行为,比如书名、作者、借阅状态等。

    用户类(User)

    负责表示用户的属性和行为,比如用户名、密码、借阅图书等。

    图书管理类(Library)

    负责管理图书的借阅和归还功能。
    在这里插入图片描述

    分析

    在这个例子中,每个类都只负责一种相关的职责,符合了单一职责原则。图书类只负责表示图书的属性和行为,用户类只负责表示用户的属性和行为,图书管理类只负责管理图书的借阅和归还功能。

    不遵守单一职责原则,可能引发的问题

    类的职责不清晰

    一个类负责了多种不相关的职责,使得代码难以理解和维护。

    类的修改影响范围过大

    当一个类负责多种职责时,对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。

    难以重用和扩展

    一个类负责多种职责时,可能会导致代码的耦合性增加,使得难以重用和扩展。
    在这里插入图片描述

    Java代码实现

    // 图书类
    class Book {
        private String title;
        private String author;
        private int pageCount;
        
        // 构造函数、getter和setter方法省略
        
        // 图书的展示功能
        public void display() {
            System.out.println("Title: " + this.title);
            System.out.println("Author: " + this.author);
            System.out.println("Page Count: " + this.pageCount);
        }
    }
    
    // 图书管理类
    class Library {
        private List<Book> books;
        
        // 构造函数、getter和setter方法省略
        
        // 图书的借阅功能
        public void borrowBook(Book book) {
            if (books.contains(book)) {
                books.remove(book);
                System.out.println("Borrowed book: " + book.getTitle());
            } else {
                System.out.println("Book not available for borrowing.");
            }
        }
        
        // 图书的归还功能
        public void returnBook(Book book) {
            books.add(book);
            System.out.println("Returned book: " + book.getTitle());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述

    程序分析

    我们定义了两个类:Book和Library。Book类负责表示图书的属性和行为,包括展示图书的功能;Library类负责管理图书的借阅和归还功能。

    通过将图书的展示功能和图书的借阅、归还功能分别放在不同的类中,我们遵守了单一职责原则。每个类只负责一种相关的职责,使得代码更加清晰和易于维护。

    当我们需要使用这些功能时,可以直接调用相应的方法

    Book book = new Book("Design Patterns", "Gang of Four", 400);
    book.display();
    
    Library library = new Library();
    library.borrowBook(book);
    library.returnBook(book);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样,我们可以很方便地使用图书的展示、借阅和归还功能,而不会影响到其他相关的功能。

    总结

    总结来说,单一职责原则是设计模式中的一项重要原则,它要求将功能划分得更加细致,使得每个类或模块
    只负责一种相关的职责。遵守单一职责原则可以提高代码的可读性、可维护性和可扩展性。

  • 相关阅读:
    1、VS2019配置glfw和glad
    【JavaScript 逆向】Protobuf 协议之万方数据平台正逆分析
    vue项目上线后去除控制台所有console.log打印-配置说明
    电脑蓝屏怎么办?一分钟教你修好
    linux 下如何通过 GDB 调试,查崩溃
    DeFi 前景展望:概览主流 DeFi 协议二季度进展
    群晖系统安装相关文件分享
    机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)
    基于Ambari下的大数据架构设计
    rocksdb 中 db_bench 的使用方法
  • 原文地址:https://blog.csdn.net/weixin_74888502/article/details/132967278