設計模式(07) 代理模式(簡單入門 結構模式)

From Now On,Let us begin Design Patterns。

代理模式

定義

  • 爲其他對象提供一種代理以控制對這個對象的訪問。 Provide asurrogate or placeholder for another object to control access to it.

代理模式也叫做委託模式,它是一項基本設計技巧。許多其它的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,而且在日常的應用中,代理模式可以提供非常好的訪問控制。下面看一下通用類圖中三個角色的定義:

1. Subject抽象主題角色:
可以是抽象類也可以是接口,是一個最普通的業務類型定義,無特殊要求;

2. RealSubject具體主題角色:
也叫做被委託角色、被代理角色。它纔是業務邏輯的具體執行者;

3. Proxy代理主題角色:
也叫做委託類、代理類。它負責對真實角色的應用,把所有抽象主題類定義的方法限制委託給真實主題角色實現,並且在真實主題角色處理完畢前後做預處理和善後處理工作。

通用類圖:
這裏寫圖片描述

通用源碼實現如下:

這裏寫圖片描述

代理模式的優點:

  • 職責清晰:真實的角色就是實現實際的業務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件事務,附帶的結果就是編程簡潔

  • 高擴展性:具體主題角色是隨時都會發生變化的,只要它實現了接口,不用管它如何變化,都逃不了接口,那我們的代理類完全可以在不做任何修改的情況下使用。

代理模式的缺點:

  • 不清楚

代理模式的使用場景:

需要將事務委託其它模塊的情境

需要對另一對象進行訪問控制的情境

代理模式的分類

透明代理:用戶不用知道代理的存在,可以直接訪問目標

普通代理:用戶要先知道代理的存在,才能訪問目標

強制代理:用戶直接調用真實角色,不用關心代理是否存在,但是其代理的產生是由真實角色決定

代理模式的例子:源自head frist of 設計模式

類圖:
這裏寫圖片描述

買車的行爲接口:
這裏寫圖片描述

顧客買車的具體行爲:
這裏寫圖片描述

代理類:4S店銷售員:
這裏寫圖片描述

買車的場景:
這裏寫圖片描述

運行結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章