1. 程式人生 > >JavaSE基礎(day23)(1)設計模式

JavaSE基礎(day23)(1)設計模式

默寫:
1.建立 Class物件的四種方式
2.通過Class 物件 如何建立對應的java型別的例項?
newInstance() 最終呼叫構造方法
3.如何通過Class 物件獲取建構函式型別的物件 如何獲得欄位型別的物件
如何獲取方法型別的物件
getConstructor getDeclaredConstructor getConstructors
getField getDeclaredField getFields
getMethod getDeclaredMethod getMethods
4.Class 物件 獲取到方法物件之後 如何呼叫這個方法
invoke(物件,變長引數)

今日內容:
1.設計模式的設計原則
1.1 開閉原則 (open close principle)
對擴充套件開放 對修改關閉 (車的電路 儘量不要去改動 如果對預留的介面擴充套件功能是可以的)
因為修改原來的程式碼 更容易引入 bug
1.2 里氏代換 (liskvo substitution principle )
任何基類(父類) 出現的地方 都可以使用 派生類 (子類) 替代
子類物件 is a 父類物件
1.3 依賴倒轉原則 (Dependence inverse principle)
程式設計儘量的依賴於 介面 或者 抽象類 而不應該依賴於 具體的實現類
可以給程式帶來更大的靈活性

   public  class  AnimalTest{
        public   void    test1(Animal animal){
            //dog.watchHome();
            animal.fun();
        }
   }   

1.4 介面隔離原則(Interface Segregation Principle)
儘量使用小介面 而不要使用一個很大的介面 包含很多功能
可以避免介面汙染

   public  Interface  IRun{
        void  run();
   }
   public  Interface  IAttack{
        void  attack();
   }  

1.5、迪米特法則(最少知道原則)(Demeter Principle)
程式設計 儘量遵循 高內聚 低耦合(儘量減少與其它元件的關聯 )
1.6 合成複用原則(Composite Reuse Principle)
儘量使用 組合 或者 聚合 而儘量減少使用 繼承
組合 兩個元件生命期相互依賴 汽車 傳送機 人 和 大腦
聚合關係 兩個元件生命期關係不強 汽車 has a 收音機
這兩個都是 一個 has a

  class  Radio{
      public  void  radio(){
          // 收聽廣播
      }
  }
  public  class  Car {
      private  Radio  r;
      public  void  play(){
          r.radio();
      }
  }

2.設計模式
2.1 概念
進過前人反覆使用,經過反覆驗證,被多數人認可的,並且分類編目的 一個程式碼設計經驗的總結.
2.2 設計模式的分類
建立型:工廠模式(一個工廠有多條生產線) 抽象工廠模式(一個工廠只有一條生產線) 單例模式 (掌握)
結構型:裝飾器模式 代理模式(動態代理) 組合模式 (熟悉)
行為模式: 迭代器模式 觀察者模式 模板模式 (瞭解)

3.查詢演算法
3.1 線性查詢
從前往後 依次對比需要查詢的資料 如果找到對應的元素 則返回元素的位置
練習:
設計一個方法 傳入一個整數陣列 然後傳入要查詢的資料 返回資料在陣列中的位置
如果陣列中沒有這個陣列 則 返回 -1
3.2 二分查詢
a.要求數列中的資料 保持有序
b.求出數列中 中間下標 對應的元素 進行比較
c.如果中間下標對應的下標元素 等於 目標元素 則直接返回位置
d.如果中間下標對應的元素 大於 目標元素 左側重複 b
e.如果中間下標對應的元素 小於 目標元素 則右側重複 b
f.如果查詢完所有的元素 都沒有目標元素 則返回 -1
4.排序演算法
4.1 氣泡排序
核心思想:相鄰的元素進行比較 滿足條件 就進行交換 如果一趟排序中沒有出現元素交換
則排序完成。

4.2 快速排序
a.記錄左右兩側的下標 求出中間下標 和 中間下標對應的值 然後單獨保留中間下標對應的值
b.從左側 依次取出值 直到有一個元素 大於 中間值 就把大的資料 放到 中間下標對應的位置
立即把 中間下標 移動到 有元素移動的位置。
c.如果左側發生了元素移動 則立即從右側開始 依次查詢比中間元素小的 找到之後 把資料
移動到中間下標所在的位置。並且把中間下標執行到 移動元素的位置。然後重複 b。
d.最終 左側 中間 和 右側重合 則把保留的中間 放到重合位置。
e.使用遞迴處理左右兩側。
視訊
javaseday23-1.設計原則
https://v.qq.com/txp/iframe/player.html?vid=g0800nudve3
javaseday23-2.設計模式介紹
https://v.qq.com/txp/iframe/player.html?vid=x0800is8457
javaseday23-3.工廠模式的實現
https://v.qq.com/txp/iframe/player.html?vid=d0800ic7gls
javaseday23-4.線性查詢和二分查詢
https://v.qq.com/txp/iframe/player.html?vid=x0800zynoy2
javaseday23-5.氣泡排序和快速排序介紹
https://v.qq.com/txp/iframe/player.html?vid=q0800greymj

程式碼
https://pan.baidu.com/s/1F3kSEgjCESsTHuHm2pTWTg