1. 程式人生 > >設計模式基礎之開閉原則

設計模式基礎之開閉原則

設計模式

設計模式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();
            }

說明:這個只是其中的一部分內容而已,過後小編還會把一些剩餘的內容給補上。