設計模式基礎之開閉原則
設計模式
設計模式23式
(一)瞭解設計模式給程式設計帶來的好處
(二)建立型模式:熟練掌握(簡單工廠,工廠方法,抽象,單利模式,建造者模式,原型模式)
(三)結構性模式:介面卡模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式,
(四)行為模式:策略模式,模板方法模式,觀察者模式,迭代子模式,責任鏈模式,命令模式,備忘錄模式,狀態模式,訪問者模式中介者模式,直譯器模式。
軟體設計原則
(1)可複用
軟體的某一些類庫可以在不同的軟體中使用,這樣可以大大的提高了開發的效率。
(2)可維護性
只得是需求有變化的給軟體增減一些功能,只是需要修改一些想修改的地方,而其他的地方又不受影響,這樣就可以達到了減少軟體的重新測試時間。
(3)可擴充套件性
指的是軟體可以擴充套件性,有好的優勢是可以通過外掛的形式提供對本身的功能進行擴充套件。
六大原則
(1)單一原則
例如:每一個物件都應該實現相對應的單一職責,如果不是的話,就應該把這個類給拆分了。(理解案例:資料庫程式碼功能,使用者程式碼功能,這兩個不相同,所以就是得把他們給拆分實現相對應的職責)
1.單一原則:就是一個類只有一個例項,並且提供一個訪問它的全域性訪問點。
(2)里氏替換原則
抽象不依賴細節,細節依賴於抽象
例如:你想回家,而你回家的方式有很多種,走路回家,騎自行車回家,坐車回家等等很多種,而你的目的,就是回家,而你回家的方式是由自己決定的,而做軟體的時候,你想把一個功能給實現,但是也可以使用很多的方法是一樣的。
(3)依賴倒轉原則
定義:依賴倒置原則包含三個含義
(1)高層模組不應該依賴底層模組,兩者都應該依賴其抽象
(2)抽象不應該依賴細節
(3)細節應該依賴抽象
依賴倒置原則在Java中的實現是表現是:
(1)模組間的依賴是通過抽象發生的,實現類之間不發生直接依賴關係,其依賴關係是通過介面或者是抽象類產生的。
(2)介面和抽象不依賴於實現類
(3)實現類依賴介面和抽象類
遵循原則:
(1)每個類都要儘量有一個介面或者是一個抽象類
(2)變數的表面型別儘量是介面或者抽象類
(3)任何類都不應該從具體類派生
(4)儘量不要寫基類是一個抽象類,而且這個方法已經實現了,子類儘量不要複寫
(5)介面負責的定義是public屬性和方法,並且宣告與其他物件的依賴關係,抽象類負責公共構造部分的實現,實現類準確的實現業務邏輯
(4)介面隔離原則
每一個介面中不存在子類用不到的,但是有必須要實現的方法(理解:今天自己不想吃飯,但是自己又不得不吃飯),如果不是的話,那就將它的介面拆分,使用多種隔離的介面(理解:如果今天自己不想吃飯,但是你可以選擇吃水果,吃牛排,吃雞肉等等之類)。
每一個介面中不存在子類用不到的,但是有必須要實現的方法(理解:今天自己不想吃飯,但是自己又不得不吃飯),如果不是的話,那就將它的介面拆分,使用多種隔離的介面(理解:如果今天自己不想吃飯,但是你可以選擇吃水果,吃牛排,吃雞肉等等之類)。
(5)迪米特法則
(1)最好的理解就是降低各個模組之間的耦合
(6)開發封閉原則
(1)軟體的實體(類,模組,函式.....)可以在它們的基礎上進行擴張是開發的,但是對於更改他們原有的程式碼是封閉的。
小案例:
//操作類
public abstract class Operation
{
public int numberA;
public int numberB
public abstract int GetResult();
}
//減的方法
public class AddOperation:Operation
{
public override int GetResult()
{
return (this.numberA + this.numberB);
}
}
//加的方法
public class SubOperation:Operation
{
public override int GetResult()
{
return (this.numberA - this.numberB);
}
}
//簡單工廠
public class SimpleFactory
{
public static Operation CreateOperation(string operation)
{
Operation o = null;
switch (operation)
{
case "+":
o = new AddOperation();
break;
case "-":
o = new SubOperation();
break;
return o;
}
}
static void Main(string[] args)
{
Operation operation1 = c SimpleFactory.CreateOperation("+");
operation1.numberA = 10;
operation1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());
Operation operation2 = SimpleFactory.CreateOperation("-");
operation2.numberA = 10;
operation2.numberB = 20;
Console.WriteLine("{0}-{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());
Console.Read();
}
說明:這個只是其中的一部分內容而已,過後小編還會把一些剩餘的內容給補上。