一、面向對象三大設計原則
1、針對接口編程,而不是針對實現編程
可以通過派生接口的類實現(Java中常見)來完成,這樣無需知道具體的實現。可自頂而上的進行設計,也可以自下而上的進行抽取公共部分。
public interface A//接口
{
public:
void Move();
void Fly();
}
//分別從這個接口派生類實現
在C++類中,可將其進行轉換處理,起到一個函數轉換的作用
void Move_base()
{
Move();//子類的實現
}
2、優先使用對象組合,而不是類繼承
這樣的話,一個對象就把職責分散開來,交給不同的對象來處理
3、封裝變化點【3】
使得儘量修改變化地方的修改,解釋如下:
//工廠方法模式
Factory fac=new Factory ();
Animal ani=new Dog(); //如果修改爲Chicken的話,則不需要修改其他代碼,這個是變化的地方
fac.setAnimal( ani);
Animal ani1=fac.createInstance(); //在一個函數體內,或者在其他地方
Animal ani2=fac.createInstance();
二、五大具體設計原則
1、單一職責原則(SRP—Single Responsibility Principle)【4】、【5】
將一個兩個職責接口進行拆分,然後從他們爲派生一個公共的接口
2、開放—封閉原則(OCP—Open for extension ,Closed for modification Principle)
對擴展開放,對修改封閉,即加入新的功能時,要不修改原來的組件代碼。
3、Liskov替換原則(LSP)
子類必須替換它的基類,其實就是一派生的功能。
4、依賴倒置原則(DIP—Delpendence Inversion Principle)
裏面就是Factory Method實現可以做一個解釋。
a. 高層模塊不依賴於底層模塊,兩者都依賴於抽象
b. 抽象不應該依賴細節,細節應該依賴抽象。
5、接口隔離原則(ISP—Interface Segregation Principle)【6】
將各種接口分一個類別,然後依賴時,調用各個類別的接口對象
參考:1、面向對象設計模式縱橫談(1)