C#中的訊號量---Semaphore
阿新 • • 發佈:2021-01-01
依賴倒置原則的定義
依賴倒置原則(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("學習數學課");
}
}
- 建立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