主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
单一职责原则(Single Responsibility Principle,SRP)是设计模式中的一项原则,它指出一个类或模块应该有且只有一个引起它变化的原因。换句话说,一个类或模块应该只负责一项职责。
将系统中的功能和行为划分为不同的职责,每个类或模块只负责一种相关的职责。这样可以使得类的职责更加明确和清晰,便于理解和维护。
一个类或模块应该只有一个引起它变化的原因。如果一个类负责多种不相关的职责,那么对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。
类的内聚性指的是类内部的成员之间联系的紧密程度。遵守单一职责原则可以提高类的内聚性,使得类内部的成员相互关联度高,功能相关的代码放在同一个类中,便于理解和维护。
类之间的耦合性指的是彼此之间的依赖程度。遵守单一职责原则可以降低类之间的耦合性,使得类之间的依赖关系更加清晰和简单,减少代码的依赖和影响范围。
单一职责原则的核心思想是将一个类或模块的职责限定在一个很小的范围内,使其只负责一种相关的功能或行为。这样可以保持类的高内聚性、低耦合性,提高代码的可读性、可维护性和可扩展性。
假设我们有一个图书管理系统,其中包含了图书的借阅和归还功能。我们可以将这个系统划分为以下几个类:
负责表示图书的属性和行为,比如书名、作者、借阅状态等。
负责表示用户的属性和行为,比如用户名、密码、借阅图书等。
负责管理图书的借阅和归还功能。
在这个例子中,每个类都只负责一种相关的职责,符合了单一职责原则。图书类只负责表示图书的属性和行为,用户类只负责表示用户的属性和行为,图书管理类只负责管理图书的借阅和归还功能。
一个类负责了多种不相关的职责,使得代码难以理解和维护。
当一个类负责多种职责时,对其中一个职责的修改可能会影响到其他职责,增加了代码的风险和复杂性。
一个类负责多种职责时,可能会导致代码的耦合性增加,使得难以重用和扩展。
// 图书类
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());
}
}
我们定义了两个类: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);
这样,我们可以很方便地使用图书的展示、借阅和归还功能,而不会影响到其他相关的功能。
总结来说,单一职责原则是设计模式中的一项重要原则,它要求将功能划分得更加细致,使得每个类或模块 只负责一种相关的职责。遵守单一职责原则可以提高代码的可读性、可维护性和可扩展性。