2022年1月27日 星期四

[Geroge]設計模式-代理模式

 







代理模式: 為其他對象提供一種代理以控制對這個對象的訪問, 在某些情況下, 一個對象不適合或著不能直接引用另一個對象, 而代理對象可以在客戶端和目標對象中間起到中介作用








模式中包含的對象及其職責

Subject: 抽象主題主角, 抽象主題類可以是抽象類, 也可以是介面, 是一個最普通的業務類型定義, 無特殊要求

RealSubject: 具體主題角色, 也叫做委託角色, 被代理角色, 是業務邏輯的具體執行者

Proxy: 代理主題角色, 也叫委託類, 代理類, 它被所有抽象主題類定義的方法給具體主題角色實現, 並且在具體主題角色處理完畢前後做預處理和善後工作(最簡單的比如打印日誌)

對於subject來說, 如果傳過來的是RealSubject, 就叫RealSubject做事, 如果是Proxy就叫Proxy做事

例子:

我們有一個介面, IMacSeller, 它有一個方法buy

我們造一個類別USAMacSeller 作為真正商品來源的賣商, 實現買的功能(reasubjet)

我們再造一個類別HongKongMacSeller, 作為代理商(Proxy)當我們購買的時候, 它會將USAMacSeller 叫出來實現購買




















相當於說, 他去美國買這件事情已經看不到, 也就是香港這個代理商幫我們做了去美國買這一件事情, 今天我們換成和美國買, 也是沒有問題, 今天這個代理這一件事情, 對於我們客戶端是不可見的, 也是可以任意替換的, 今天要去泰國, 或是其他地方買, 對我們而言也是一樣的, 我們只知道我們買到了macbook, 但是代理商從哪來的就是不可見的


應用場景:

現實世界中, 秘書就相當於一個代理, 老闆開會, 通知員工開會時間, 布置會場, 會後整理會場等等工作事情就可以叫給秘書來做, 老闆只需要開會就行, 並不需要親自做那些事, 同理, 我們程式設計中可以使用代理模式, 將一系列無關邏輯組合再一起進行解耦, 比如業務代碼中的日誌代碼, 就可以在代理中進行, Spring的AOP就是典型的動態代理應用


https://www.youtube.com/watch?v=cA-vt0Nf1nQ&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM&index=15

https://github.com/iw5420/geroge-design-pattern


沒有留言:

張貼留言

[leetcode] [KMP] KMP

ABCDABD... ABCDABF... 簡單的說, 傳統解兩字串匹配部分 可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位 然後不匹配再後移 然而 如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位 隱藏的思維是, 當...