Java設(shè)計(jì)模式中單一職責(zé)原則詳解
前言
本博主將用CSDN記錄軟件開發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識,有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)!
一、介紹
單一職責(zé)原則 (SRP) 是軟件設(shè)計(jì)中的一個(gè)重要原則,它要求每個(gè)類只負(fù)責(zé)一個(gè)職責(zé)。 如果類A負(fù)責(zé)兩個(gè)不同職責(zé):職責(zé)1,職責(zé)2。當(dāng)職責(zé)1需求變更而改變A時(shí),可能造成職責(zé)2執(zhí)行錯(cuò)誤。
這個(gè)原則的重要性在于:
- 降低類的復(fù)雜度,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé);
- 提高類的可讀性,可維護(hù)性;
- 降低變更引起的風(fēng)險(xiǎn);
- 通常情況下,我們應(yīng)當(dāng)遵守單一職責(zé)原則,只有邏輯足夠簡單,才可以在代碼級違反單一職責(zé)原則;只有類中方法數(shù)量足夠少,可以在方法級別保持單一職責(zé)原則;
二、代碼演示
假設(shè)我們有一個(gè)名為
Customer
的類,它負(fù)責(zé)管理客戶的信息和交易。 現(xiàn)在我們想要對這個(gè)類進(jìn)行改進(jìn),讓它只負(fù)責(zé)一個(gè)職責(zé),也就是管理客戶信息和交易。 我們可以考慮采用單一職責(zé)原則,將原來的兩個(gè)職責(zé)分開,讓Customer
只負(fù)責(zé)管理客戶信息,而交易職責(zé)則由另一個(gè)類Transaction
來負(fù)責(zé)。
// 客戶類,負(fù)責(zé)管理客戶信息和交易 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; } } // 交易類,負(fù)責(zé)管理交易 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; } } // 客戶端類,演示單一職責(zé)原則的應(yīng)用 public class Client { public static void main(String[] args) { // 創(chuàng)建客戶對象 Customer customer = new Customer("John", 30); // 創(chuàng)建交易對象 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
類只負(fù)責(zé)管理客戶信息,它擁有了四個(gè)方法,分別是addTransaction
,removeTransaction
和getName
,getAge
。Transaction
類只負(fù)責(zé)管理交易,它擁有了兩個(gè)方法,分別是getDescription
和getAmount
。
Client
類演示了單一職責(zé)原則的應(yīng)用,它創(chuàng)建了一個(gè)Customer
對象,并添加了兩個(gè)Transaction
對象到它的Customer
對象中。最后,Client
類獲取了Customer
對象的Name
和Transaction
列表,并輸出了它們。
通過上面的示例,我們可以看到單一職責(zé)原則的應(yīng)用可以讓代碼更加簡潔,易于維護(hù)和擴(kuò)展。
到此這篇關(guān)于Java設(shè)計(jì)模式中單一職責(zé)原則詳解的文章就介紹到這了,更多相關(guān)Java單一職責(zé)原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn)
本文主要介紹了淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07圖文講解IDEA中根據(jù)數(shù)據(jù)庫自動(dòng)生成實(shí)體類
這篇文章主要以圖文講解IDEA中根據(jù)數(shù)據(jù)庫自動(dòng)生成實(shí)體類,本文主要以Mysql數(shù)據(jù)庫為例,應(yīng)該會對大家有所幫助,如果有錯(cuò)誤的地方,還望指正2023-03-03阿里規(guī)范:為何boolean類型變量命名禁用is開頭
這篇文章主要給大家介紹了關(guān)于阿里規(guī)范:為何boolean類型變量命名禁用is開頭的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)
這篇文章主要為大家介紹了shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Easypoi 輕松實(shí)現(xiàn)復(fù)雜excel文件導(dǎo)出功能
這篇文章主要介紹了Easypoi 輕松實(shí)現(xiàn)復(fù)雜excel文件導(dǎo)出功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11