1. 程式人生 > 實用技巧 >C#中的訊號量---Semaphore

C#中的訊號量---Semaphore

技術標籤:設計模式設計模式依賴倒置

依賴倒置原則的定義

依賴倒置原則(Dependence Inversion Principle,DIP)指設計程式碼結構時,高層模組不應該依賴底層模組,二者都應該依賴其抽象。抽象不應該依賴細節,細節應該依賴抽象。通過依賴倒置,可以降低類與類之間的耦合性,提高系統的穩定性,提高程式碼的可讀性和可維護性,並降低修改程式帶來的風險。

示例

  • 首先建立一個課程的抽象介面ICourse
package com.liguogang.DIP;

public interface ICourse {
    void study();
}

  • 然後寫EnglishCourse類
package com.liguogang.DIP;

public class EnglishCourse implements ICourse {
    @Override
    public void study() {
        System.out.println("學習英語課");
    }
}

  • 再實現MathCourse類
package com.liguogang.DIP;

public class MathCourse implements ICourse {
    @Override
    public void study() {
System.out.println("學習數學課"); } }
  1. 建立Person類(依賴注入:構造器注入)
package com.liguogang.DIP;
/**
 * 依賴注入:構造器注入
 */
public class Person {
    public void study(ICourse course) {
        course.study();
    }
}

1.1 客戶端呼叫程式碼

package com.liguogang.DIP;

public class Test {
    public static
void main(String[] args) { // 依賴注入:構造器注入 Person person = new Person(); person.study(new EnglishCourse()); } }

2.1 如果Person 是全域性單例,修改Persion類(依賴注入:Setter注入)

package com.liguogang.DIP;

/**
 * 依賴注入:Setter注入
 */
public class Person {
    
    private ICourse course;

    public void setCourse(ICourse course) {
        this.course = course;
    }

    public void study(){
        course.study();
    }
}

2.2 客戶端呼叫程式碼

package com.liguogang.DIP;

public class Test {
    public static void main(String[] args) {
        // 依賴注入:Setter注入
        Person person = new Person();
        person.setCourse(new EnglishCourse());
        person.study();

        person.setCourse(new MathCourse());
        person.study();
    }
}

結果:
在這裡插入圖片描述
程式碼地址:https://github.com/lee58/designPattern/tree/master