java设计模式2,开闭原则
目錄
- 一、開閉原則定義
- 二、模擬場景
- 1、定義接口
- 2、實現類,普通用戶
- 3、實現類,專屬用戶
- 4、VIP用戶
- 三、違背原則方案
- 四、開閉原則改善代碼
一、開閉原則定義
開閉原則,在面向對象編程領域中,規定“軟件中的對象(類,模塊,函數等等)應該對于擴展是開放的,但是對于修改是封閉的”,這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。該特性在產品化的環境中是特別有價值的,在這種環境中,改變源代碼需要代碼審查,單元測試以及諸如此類的用以確保產品使用質量的過程。遵循這種原則的代碼在擴展時并不發生改變,因此無需上述的過程。
二、模擬場景
開閉原則的核心思想是面向抽象編程,定義出接口并實現其方法,通過繼承方式進行擴展,都可以體現出開閉原則。
通過訂閱哪吒專欄的場景說明一下。
1、普通用戶,一般只能查閱哪吒的普通文章,并通過超鏈的形式時刻提醒著它們,要購買哪吒的付費專欄,付費知識就是香。
2、專屬用戶,通過購買專欄的形式查閱單一專欄的優質文章,并時刻提醒著,要購買其它專欄啊,畢竟學習才是王道。
3、VIP用戶(訂閱了哪吒的全部專欄),既可以看《Java基礎教程系列》,也可以看《Spring Boot 進階實戰》,無推廣,告別CRUD,進階高級Java工程師,升職加薪,迎娶白富美。
1、定義接口
定義要實現的功能,閱讀文章、推廣選擇。
package com.guor.service;public interface IUserService {// 閱讀文章void read();// 推廣宣傳void promote(); }2、實現類,普通用戶
package com.guor.service.impl;import com.guor.service.IUserService;/*** 普通用戶*/ public class GeneralUserServiceImpl implements IUserService {public void read() {System.out.println("可以查閱哪吒的普通文章");}public void promote() {System.out.println("并通過超鏈的形式時刻提醒著它們,要購買哪吒的付費專欄,付費知識就是香");} }3、實現類,專屬用戶
package com.guor.service.impl;import com.guor.service.IUserService;/*** 專屬用戶*/ public class ExclusiveUserServiceImpl implements IUserService {public void read() {System.out.println("通過購買專欄的形式查閱單一專欄的優質文章");}public void promote() {System.out.println("并通過超鏈的形式時刻提醒著它們,購買哪吒的其它付費專欄,付費知識就是香");} }4、VIP用戶
package com.guor.service.impl;import com.guor.service.IUserService;/*** VIP用戶*/ public class VipUserServiceImpl implements IUserService {public void read() {System.out.println("腳踩風火輪,手拿乾坤圈,學習哪吒優質文章,我命由我不由天。");}public void promote() {System.out.println("告別CRUD,進階高級Java工程師,升職加薪,迎娶白富美");} }每種用戶對應的閱讀權限都有對應的實現類,不會相互干擾。當某一類用戶需要添加新的權限或增加新的用戶類別時,操作起來也非常方便。比如上文中提到的逢年過節的要給哪吒VIP發放福利,比如贈送精美圖書,贈送精美周邊等。
通過利用單一職責原則優化后,現在每個類只負責自己的用戶行為,后續無論擴展新的功能還是增加用戶種類,都可以很方便的開發和維護。
在項目開發的過程中,盡可能保證接口的定義、類的實現保持單一職責,對項目后期的迭代和維護會有很大的幫助。
那么此時,如果想對VIP用戶的權益進行升級,需要擴展,接下來就通過這個場景來體現開閉原則。
三、違背原則方案
如果不考慮開閉原則,也不思考這種方法在整個工程服務中的使用情況,沒直接修改VipUserServiceImpl實現類即可。
package com.guor.service.impl;import com.guor.service.IUserService;/*** VIP用戶*/ public class VipUserServiceImpl implements IUserService {public void read() {System.out.println("腳踩風火輪,手拿乾坤圈,學習哪吒優質文章,我命由我不由天。");}public void promote() {System.out.println("新增VIP會員免費送書權益");} }四、開閉原則改善代碼
按照開閉原則實現起來并不復雜,它的主要目的是不能因為個例需求的變化而改變寫好的實現類,除非之前的實現類有錯誤。
實現過程式繼承父類擴展需要的方法,同時可以保留原有的方法,新增自己需要的方法。
package com.guor.service.impl;public class VipUserServiceExt extends VipUserServiceImpl {@Overridepublic void promote() {System.out.println("新增VIP會員免費送書權益");} }擴展后的方法已經將VIP會員的權益進行了提升,需要此方法,用戶可以直接調用,而其它方法,如查閱哪吒全部文章,則可以繼續使用。
總結
以上是生活随笔為你收集整理的java设计模式2,开闭原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAS 宏编程技术
- 下一篇: 项目经理(project manager