1.設計模式解決的問題
- 類過於龐大
- 類在設計時,實現多複用,高內聚,低耦合
- 容易兼容新接口
2.七大設計原則
- 單一職責原則
- 開閉原則
- 里氏代換原則
- 依賴倒轉原則
- 接口隔離原則
- 合成|聚合複用原則
- 迪爾特原則
一個類只有一個職責
2.開閉原則
對擴展開放,對修改關閉
如何將工資從3000提升到8000的問題
用代碼編寫兩個數的加減
package com.yufan.operation;
/**
*
* @ClassName: Calculate
* @Description: 實現兩個數的加減法
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Calculate {
/**
*
* @Title: add
* @Description:加法運算
* @param @param n1
* @param @param n2
* @param @return 參數
* @return double 返回類型
* @throws
*/
public double add(double n1, double n2){
return n1 + n2;
}
/**
*
* @Title: sub
* @Description: 減法運算
* @param @param n1
* @param @param n2
* @param @return 參數
* @return double 返回類型
* @throws
*/
public double sub(double n1, double n2){
return n1 - n2;
}
}
不易擴展,如果添加乘法與除法,需要修改該類,再添加兩個方法 另一種思路
package com.yufan.operation; /** * * @ClassName: Operator * @Description: 抽象類 操作 * @author 雨ゆこ * @date 2018年3月7日 * * */ public abstract class Operator { /** * * @Title: getResult * @Description: 抽象方法 計算兩個數運算的結果a * @param @param n1 * @param @param n2 * @param @return 參數 * @return double 返回類型 * @throws */ public abstract double getResult(double n1, double n2); }
package com.yufan.operation;
/**
*
* @ClassName: Add
* @Description:
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Add extends Operator {
@Override
public double getResult(double n1, double n2) {
// TODO Auto-generated method stub
return n1 - n2;
}
}
package com.yufan.operation;
/**
*
* @ClassName: Sub
* @Description:
* @author 雨ゆこ
* @date 2018年3月7日
*
*
*/
public class Sub extends Operator{
@Override
public double getResult(double n1, double n2) {
// TODO Auto-generated method stub
return n1 + n2;
}
}
3.里氏代換原則 LSP
子類替換掉父類後程序正常運行且結果跟預期相同才允許繼承
- 拒絕子類有自己的個性
- 一旦子類有了“個性”,則與父類之間的關係難以調和
- 會讓代碼的耦合變得撲朔迷離
- 要針對接口編程,不要針對實現編程
- 高層模塊不應該依賴底層模塊,兩者應該都以來抽象
5.接口隔離原則 ISP Interface Segregation Principle
- 客戶端不應該依賴它不需要的方法
- 類間的依賴關係應該建立在最小的接口上
6.合成/聚合複用原則 CARP Composite/Aggregate Reuse Principle
- 合成是強烈的關聯,部分(將)和整體(主)生命週期一樣,整體(主)對部分(將)有支配權,包括創建和銷燬的權利,一般在構造函數中使用
- 聚合是部分和整體的普通關聯,類屬性
- 儘量使用合成/聚合,而不是用繼承
7.迪米特原則 LOD The law of Demeter
- 不要和陌生人說話(最少知識原則)