工廠模式:
- 簡單工廠模式:
定義一個工廠類,根據傳入的參數不同返回不同的實例,被創建的實例具有共同的父類或接口
適用場景:
(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