Java設計模式-設計模式的六種原則
六種設計原則
單一職責原則
不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。
問題由來:類T負責兩個不同的職責:職責P1,職責P2。當因職責P1需求改變而需要修改類別T時,有可能會導致原本運作正常的職責P2功能發生故障。
一句話總結:不能為圖代碼量少,把牛頭馬嘴一起往一個類塞
里氏替換原則
1.子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。
2.子類別中可以增加自己特有的方法。
3.當子類別的方法重載父類別的方法時,方法的前置條件(即方法的形參)要比父類別方法的輸入參數更寬鬆。
4.當子類別的方法實作父類別的抽象方法時,方法的後置條件(即方法的回傳值)比父類別更嚴格。
一句話總結:盡量不要重寫父類的已經實現了的方法,可以用接口等其他方法繞過
依賴倒置原則
高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽像不應該依賴細節;細節應該依賴抽象。
這裡用一個列子來說明:
import java.util.LinkedList; import java.util.Queue; interface IEAT { public void eat();//抽象吃这个动作 } class EatApple implements IEAT { @Override public void eat() { //这里是吃苹果 System.out.print("eat a apple"); } } class EatWater implements IEAT { @Override public void eat() { // 这里是吃水 System.out.print("dringk water"); } } public class Human { public void dosomething(IEAT ieat)//我爱吃东西,吃什么呢,看传入什么 { ieat.eat(); } /* public void dosomething(String food)//我爱吃东西,吃什么呢,看传入什么 { if(food.equals("apple")) { //吃苹果 } if(food.equals("water")) { //喝水 } } */ public static void main(String[] args) { Human human=new Human(); /* human.dosomething("apple"); human.dosomething("water"); */ //给你吃个苹果 human.dosomething(new EatApple()); //再给你喝点水 human.dosomething(new EatWater()); } }
其中註解的就是我們常用的方法。這個方法非常不適擴展,因為如果要吃香蕉,吃西瓜,又要在dosomething裡面寫一堆判斷。寫著寫著就混了。
因此一句話總結:多用抽象的介面來描述相同的動作,降低實現這個動作的人和物之間的耦合度
介面隔離原則
客戶端不應該依賴它不需要的介面;一個類別對另一個類別的依賴應該建立在最小的介面上。
迪米特法則
迪米特法則又叫最少知道原則,最早是在1987年由美國Northeastern University的Ian Holland提出。通俗的來講,就是一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類別來說,無論邏輯多麼複雜,都盡量地的將邏輯封裝在類別的內部,對外除了提供的public方法,不對外洩漏任何資訊。
這個有點不好記,總結就是:father1
開閉原則
這個沒啥已有好說的:盡量透過修改軟體實體的行為來實現變化,而不是透過修改擴充的程式碼來實現變化。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
