面向對象設計模式與原則:新增類型(員工)不會影響原來類型(員工)的實現代碼。
封裝:隱藏內部實現;
繼承:複用現有代碼;
多態:改寫對象行爲;
對象:1.(概念)是某種擁有責任的抽象。
2.(規格)是一系列可以被其他對象使用的公共接口。
3.(實現)封裝了代碼和數據。
設計模式常規:
1、針對接口編程,而不是針對實現編程。
2.優先使用對象組合,而不是類繼承。
3、封裝變化點。
4、使用重構得到模式——設計模式的應用不易先入爲主。(源代碼就是設計)
設計模式原則:
1.單一職責。
2.放開——封閉原則(ocp)。Open-Closed Principle 原則講的是:一個軟件實體應當對擴展開放,對修改關閉。
3.Liskow替換原則(子類必須能替換基類)
4.依賴倒置原則。(依賴倒置(Dependence Inversion Principle)原則講的是:要依賴於抽象,不要依賴於具體。
簡單的說,依賴倒置原則要求客戶端依賴於抽象耦合。原則表述:
抽象不應當依賴於細節;細節應當依賴於抽象;
要針對接口編程,不針對實現編程。)
5.接口隔離原則((Interface Segregation Principle )講的是:使用多個專門的接口比使用單一
的總接口總要好。換而言之,從一個客戶類的角度來講:一個類對另外一個類的依賴性應當是建
立在最小接口上的。
過於臃腫的接口是對接口的污染。不應該強迫客戶依賴於它們不用的方法。)
實例:(結構化編程和對象編程)
結構化做法
1。獲得人事系統中所有可能的員工類型
2。根據不同的員工類型所對應的不同的薪金制度,計算其工資
enum EmployeeType{
Engineer;
Sales;
Manager;
…
}
// 計算工資程序
If ( type==EmployeeType.Engineer) {
……
}
else if (type== Employeetype.Sales) {
……
}
面向對象設計
1 。根據不同的員工類型設計不同的類,並使這些類繼承自一個
Employee抽象類,其中有一個抽象方法GetSalary。
2。在各個不同的員工類中,根據自己的薪金制度,重寫(override )
GetSalary方法。
abstract class Employee{
…
public abstract int GetSalary();
}
class Engineer: Employee{
…
public override int GetSalary() {
……
}
}
class Sales: Employee{
…
public override int GetSalary() {
……
}
}
// 顯示工資程序
Employee e=
emFactory.GetEmployee(id);
MessageBox.Show( e.GetSalary());
總結:面向對象做法只需要在新的文件裏增添新的員工類,讓其繼承自Employee抽象
類,並重寫GetSalary()方法,然後在EmployeeFactory.GetEmployee
方法中根據相關條件,產生新的員工類型就可以了。其他地方(顯示
工資程序、Engineer類、Sales類等)則不需要做任何改變。