【設計模式】設計模式梳理

工廠模式:

  • 簡單工廠模式:

定義一個工廠類,根據傳入的參數不同返回不同的實例,被創建的實例具有共同的父類或接口

適用場景:
  (1)需要創建的對象較少。
  (2)客戶端不關心對象的創建過程。

 

  • 工廠方法模式:

每一個類型設置一個工廠,生產不同類型

針對不同的對象提供不同的工廠。也就是說每個對象都有一個與之對應的工廠。

定義一個用於創建對象的接口,讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類。

public interface Reader { void read(); }

public class JpgReader implements Reader { 
@Override 
public void read() { 
System.out.print("read jpg"); 
}}

public interface ReaderFactory { Reader getReader(); }

public class JpgReaderFactory implements ReaderFactory { 
@Override 
public Reader getReader() {
return new JpgReader(); 
}}

ReaderFactory factory=new JpgReaderFactory(); 
Reader reader=factory.getReader(); 
reader.read();
  • 抽象工廠模式:

     創建一系列相互關聯互相依賴的產品族

     抽象工廠模式是工廠方法的僅一步深化,在這個模式中的工廠類不單單可以創建一個對象,而是可以創建一組對象

(1)和工廠方法一樣客戶端不需要知道它所創建的對象的類。
(2)需要一組對象共同完成某種功能時。並且可能存在多組對象完成不同功能的情況。
(3)系統結構穩定,不會頻繁的增加對象。

https://juejin.im/entry/58f5e080b123db2fa2b3c4c6


享元模式(flyweight):

    減少創建對象的數量,以減少內存佔用和提供性能。當系統中存在多個相同對象,只需要共享一份對象拷貝(提高性能)

    基本邏輯:抽象享元interface  <---  具體享元實現類  <---  享元工廠創建實現類  <---  Main調用


代理模式:

    爲其他對象提供代理,並通過代理訪問(達到控制訪問的目的)

工廠模式和代理模式的區別:

  • 工廠是提供創建接口實例邏輯的封裝,目的是讓其他類依賴於接口和工廠,而非具體的實現類
  • 代理是增加中間層,從而在中間進行額外的邏輯,比如懶惰初始化,比如封裝遠程調用,比如可以增加訪問控制

屏蔽用戶真實的對象訪問:1、安全問題   2、遠程調用、 3、提高系統性能

 

動態代理:代理類與委託類關係在運行時確定,無代理類字節碼,反射機制動態生成

編程基本邏輯:接口 <--- 實現類 <--- 代理 <--- 主函數

字節碼-->類-->實例

 

靜態代理與動態代理的區別:字節碼是否由JVM動態生成,動態代理中使用了反射去創建對象

  • 靜態:由程序員創建代理類或特定工具自動生成源代碼再對其編譯。在程序運行前代理類的.class文件就已經存在了
  • 動態:在程序運行時運用反射機制動態創建而成

https://blog.csdn.net/WangQYoho/article/details/77584832

 

Hibernate代理模式:1、延遲加載 2、關聯表延遲加載

先使用代理,在真正調用到getter方法時,使用SQL取對象


裝飾者模式:委託機制動態添加對象的功能

舉例:

    interface A

    B implements A

    C implements A

    D extends C

    E extends C

    A a = new E(D(B)); //組裝

OutputStream --->  FileOutputStream ---> BufferedOutputStream

(自動預讀更多的字節數據到它自己維護的被內部字節緩衝區中,減少系統調用次數)

                                          流                         通道

InputStream --->   FileInputStream --->  BufferedInputStream

Writer           --->        FileWriter      --->  BufferedWwriter

Reader         --->        FileReader    --->  BufferedReader

通道(流)

new DtaOputStream(new BufferedOutputStream(new FileOutputStream(......)))

// Decorator <--- DataOutputStream  <--- BufferedOutputStream <--- FileOutputStream


適配器模式:

    舊的類保持原有狀態,新的適配器類對舊類進行適配的同時,添加自己的方法

應用:Enmeration -> Iterator

 

裝飾者模式 & 適配器模式:

裝飾者模式:同一簇

適配器模式:不同簇


觀察者模式:事物變化了會去通知觀察者

ISubject(事物) ---> IOSserver(觀察者)

    |                                  |

具體事物               具體觀察者

ISubject{              IOServer{

    //添加觀察者          //處理邏輯

    //刪除觀察者        }

    //通知觀察者

}

典型實現:

    AbstractButton ---> finalActionPermed ---> ActionListener  actionPerformed()

        |

     JButton


模版方法模式:

提供一個抽象類,將部分邏輯以具體方法或構造器形式實現,然後聲明一些抽象方法來迫使子類實現剩餘邏輯。


JDK使用的設計模式:

  • 裝飾者模式:IO流
  • 迭代器模式:Iterator
  • 單例模式:   Java.lang.Runtime
  • 代理模式:   RMI
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章