今天內容:
- 1.常用的設計原則
- 2.常用的設計模式
- 3.常用的查找算法
- 4.常用的排序算法
1.常用的設計原則(記住)
1.1軟件的開發流程
軟件開發授權-投標 -> 100萬
1. 編寫需求分析文檔 =>
2. 概要設計文檔(架構) =>
3. 詳細設計文檔(類圖) =>
4. 編碼(項目經理分具體任務)還要測試 (SVN/GIT)單元測試,模塊測試(一般都是美女多一些,對于技術要求比較低) 黑盒測試 白盒測試
5. 安裝和調試寫使用說明文檔
6. 維護和升級軟件公司和客戶協商(錢要到位)還有一錘子買賣的(就是不管維護那種)如果整個開發周期是半年(可能編碼只占一個月的時間)
架構師把架構架構錯了,那就都白干了,重新架構意味著要加班,這種情況不多,因為架構師至少要5年以上經驗的
絕大多是是客戶的需求問題,或者是客戶要加功能.
1.2常用的設計原則
1. 開放封閉原則(Open Close Principe)
對于擴展開放,對于修改關閉,為了使程序的擴展性好,易于維護
如:
public class Person{private String name;private int age;private boolean gender;// ...
}
不,這樣前面美女測試人呢的工作就白做了,所以應該這樣
public class Person{private String name;private int age;// ...
}
public class SubPerson extends Person{private boolean gender;//...
}
2. 里氏代換原則(Liskov Substitution Principe)
-
任何父類可以出現的地方,子類一定可以出現
-
子類is a 父類
-
在以后的開發中多使用繼承和多態的理念
多態的實際意義:
屏蔽不同子類的差異性,實現通用的編程,產生不同的結果
如:
public statie void draw(Shape s){s.show();
}
ShapeTest.draw(new Rect(1,2,3,4));
ShapeTest.draw(new Circle(5,6,7));
// 父類類型的引用能到的地方,子類的引用也能到
3.依賴倒轉原則(Dependence Inversion Principle)
盡量多依賴于抽象類或接口而不是具體實現類,對子類具有強制性和規范性
如:
publice class Account{public double getLix(){// ... }
}
publice class FixedAccount extends Account{//我這里想重寫就重寫,以為我的父類也不是抽象的
}
要是這樣,就符合了
publice abstract class Account{public abstract double getLix(){// ... }
}
publice class FixedAccount extends Account{// 這回就不得不繼承了@Overridepublic double getLixi(){}
}
4.接口隔離原則(interface segregation principle)
- 盡量依賴于小接口而不是大接口,避免接口的污染
- 可以降低耦合度
- 耦合主要指一個模塊于其他模塊之間的關聯度.
如:
public interface Animal{public abstract void run();//描述奔跑 行為public abstract void fly(); //描述飛行行為
}public class Dog implements Animal{public abstract void run(){...};public abstract void fly(){
// 這個方法沒法寫了}
}
5.迪米特法則(最少知道原則) (Demeter Principe)
- 一個實體應當盡量少于其他實體之間 發生相互作用
- 低耦合,高內聚
- 高內聚就是指將一個實體應當將該實體應該擁有的功能盡量聚集在該實體內部
6.合成復用原則(Composite Reuse Principe)
- 盡量多使用合成的方式,而不是繼承的方式.
如:
public class A{public void show(){...}... ...
}
public class B extends A{public void test(){// 調用show方法show();}... ...// 這樣不推薦,因為java只能單繼承,或者說會影響調用show()方法時候的性能,因為繼承會繼承父類的所有方法
}
升級版
public class A{public void show(){...}... ...
}
public class B{private A a;public void test(){// 調用show方法a.show()}... ...// 這樣不推薦,因為java只能單繼承,或者說會影響調用show()方法時候的性能,因為繼承會繼承父類的所有方法
}
2常用設計模式
2.1 基本概念
- 設計模式是一套被反復使用,多數人知曉的,經過分類編目的,設計經驗的總結.
- 設計模式就是一種用于固定場合的固定套路
2.2 常用設計模式
單例設計模式
模板設計模式
工廠方法模式:
當你需要大量創建對象的時候,你就需要創建一個工廠類,然后創建一個工程方法, 這樣可以提高程序的可維護性和擴展性
抽象工廠模式
3.常用的查找算法()
-
3.1線性查找算法(重中之重)
-
3.2折半查找算法
4.常用的排序算法
冒泡排序算法
比較相鄰位置的兩個元素,若第一個元素比第二個元素大則交換;
從開始的第一對元素一直到結尾的最后一對元素,經過這一輪找到了最大值并放在了最后;
持續對越來越少的元素進行量量比較,直到所有元素不再發生交換為止;