前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
一、介绍
单一职责原则 (SRP) 是软件设计中的一个重要原则,它要求每个类只负责一个职责。 如果类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误。
这个原则的重要性在于:
- 降低类的复杂度,一个类只负责一项职责;
- 提高类的可读性,可维护性;
- 降低变更引起的风险;
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则;
二、代码演示
假设我们有一个名为
Customer
的类,它负责管理客户的信息和交易。 现在我们想要对这个类进行改进,让它只负责一个职责,也就是管理客户信息和交易。 我们可以考虑采用单一职责原则,将原来的两个职责分开,让Customer
只负责管理客户信息,而交易职责则由另一个类Transaction
来负责。
// 客户类,负责管理客户信息和交易 public class Customer { private String name; private int age; private List<Transaction> transactions; public Customer(String name, int age) { this.name = name; this.age = age; this.transactions = new ArrayList<>(); } public void addTransaction(Transaction transaction) { this.transactions.add(transaction); } public void removeTransaction(Transaction transaction) { this.transactions.remove(transaction); } public String getName() { return name; } public int getAge() { return age; } public List<Transaction> getTransactions() { return transactions; } } // 交易类,负责管理交易 public class Transaction { private String description; private double amount; public Transaction(String description, double amount) { this.description = description; this.amount = amount; } public String getDescription() { return description; } public double getAmount() { return amount; } } // 客户端类,演示单一职责原则的应用 public class Client { public static void main(String[] args) { // 创建客户对象 Customer customer = new Customer("John", 30); // 创建交易对象 Transaction transaction1 = new Transaction("Buy Coffee", 10.00); Transaction transaction2 = new Transaction("Sell Stock", 50.00); // 添加交易到客户对象 customer.addTransaction(transaction1); customer.addTransaction(transaction2); // 获取客户信息和交易列表 String name = customer.getName(); int age = customer.getAge(); List<Transaction> transactions = customer.getTransactions(); // 输出客户信息和交易列表 System.out.println("Customer name: " + name + ", age: " + age + ", transactions: " + transactions); } }
在上面的代码中,
Customer
类只负责管理客户信息,它拥有了四个方法,分别是addTransaction
,removeTransaction
和getName
,getAge
。Transaction
类只负责管理交易,它拥有了两个方法,分别是getDescription
和getAmount
。
Client
类演示了单一职责原则的应用,它创建了一个Customer
对象,并添加了两个Transaction
对象到它的Customer
对象中。最后,Client
类获取了Customer
对象的Name
和Transaction
列表,并输出了它们。
通过上面的示例,我们可以看到单一职责原则的应用可以让代码更加简洁,易于维护和扩展。