【設計模式】4.設計模式原則-單一職責原則
阿新 • • 發佈:2022-06-01
一、原則:
規定一個類應該有且僅有一個引起它變化的原因,否則類應該被拆分。
二、作用:
1.降低類的複雜度。一個類只負責一項職責,其邏輯肯定要比負責多想職責簡單得多。
2.提高類的可讀性。複雜性降低,自然其可讀性會提高
3.提高系統的可維護。
4.變更引起的風險降低。變更是必然的,如果單一職責原則遵守的好,當修改一個功能時,可以顯著降低對其他功能的影響。
三、實現:
1.涉及到的種類:模組、包、介面、類、方法、
2.需求設計上要注意職責區分,不同的設計職責區分不同,不要一刀切。
3.不要過度使用單一職責,像一個類只執行一個方法等浪費空間的做法不可取,建議根據功能或者實體來劃分職責。
四、涉及到哪些設計模式:
23種設計模式都用到了。
五、示例:
單一職責原則在平時用到的很多,比如API類來說,一個負責使用者的增刪改查功能的介面類,不能將角色的增刪改查功能新增進來。具體的功能劃分還是要根據需求來說,比如有些需求是登入和註冊是兩個連結,就需要分開來寫,有些是一個按鈕,那麼API就是一個,但是具體的介面需要是兩個(一個登入,一個註冊);比如有些Util工具類,需要根據功能來新增具體方法,比如AES加密,RSA加密等方法需要分兩個Util寫;還有的話,一個Mapper介面只能寫當前實體的資料庫操作方法,不要將對其他表的操作加進來(關聯查詢除外)。比如下面的程式碼就是適當使用了單一職責:
介面類:
public interface UserService { void login(String username, String password); int register(String username, String password); int logout(String username, String password); }
實現類:
@Service public class UserServiceImpl implements UserService { /** * 登入 * * @paramusername * @param password */ @Override public void login(String username, String password) { System.out.println("登入成功"); } /** * 註冊 * * @param username * @param password */ @Override public int register(String username, String password) { System.out.println("註冊成功"); //新增使用者成功返回1, 新增失敗返回0 return 1; } /** * 登出 * * @param username * @param password */ @Override public int logout(String username, String password) { System.out.println("登出成功"); //登出使用者成功返回1, 登出失敗返回0 return 1; } }
API介面:
@RestController("/user") public class UserApi { private UserService userService; @GetMapping("/login") public void login(String username, String password) { userService.login(username, password); } @GetMapping("/register") public void register(String username, String password) { userService.register(username, password); } @GetMapping("/logout") public void logout(String username, String password) { userService.logout(username, password); } }
因為當前功能中,使用者只涉及到了註冊、登入、登出等行為,因此直接定義一個使用者類,將使用者的行為放到此類中,針對方法使用單一職責即可。