天天看點

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