設計模式

1.設計模式解決的問題

  • 類過於龐大
  • 類在設計時,實現多複用,高內聚,低耦合
  • 容易兼容新接口

2.七大設計原則

  • 單一職責原則
  • 開閉原則
  • 里氏代換原則
  • 依賴倒轉原則
  • 接口隔離原則
  • 合成|聚合複用原則
  • 迪爾特原則
  1.單一職責原則   SRP 

        一個類只有一個職責   

    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

    子類替換掉父類後程序正常運行且結果跟預期相同才允許繼承

  • 拒絕子類有自己的個性
  • 一旦子類有了“個性”,則與父類之間的關係難以調和
  • 會讓代碼的耦合變得撲朔迷離
4.依賴倒轉原則        
  • 要針對接口編程,不要針對實現編程
  • 高層模塊不應該依賴底層模塊,兩者應該都以來抽象

5.接口隔離原則    ISP   Interface Segregation Principle

  •     客戶端不應該依賴它不需要的方法
  • 類間的依賴關係應該建立在最小的接口上

6.合成/聚合複用原則   CARP  Composite/Aggregate  Reuse Principle

  •  合成是強烈的關聯,部分(將)和整體(主)生命週期一樣,整體(主)對部分(將)有支配權,包括創建和銷燬的權利,一般在構造函數中使用
  • 聚合是部分和整體的普通關聯,類屬性
  • 儘量使用合成/聚合,而不是用繼承

 7.迪米特原則  LOD  The law of Demeter

  • 不要和陌生人說話(最少知識原則)

發佈了72 篇原創文章 · 獲贊 12 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章