概念與特點
概念:
由於某些原因,需要給某個對象提供一種代理服務,以控制對該對象的訪問。此時代理對象作爲目標對象與訪問對象之間的媒介。生活中的代理模式隨處可見。如 4S 店就是消費者與廠家之間的代理商。租房的承租人一般也會找中介,而不是直接聯繫房主。
特點:
- 代理對象在客戶端與目標對象之間起到中介作用,某種程度上可以保護目標對象。
- 代理對象可以拓展目標對象的功能,這符合設計模式的開閉原則。
- 代理的目的就是專職辦專事,可以解耦目標對象與客戶端之間的關係。
結構與實現
代理模式包含抽象主題類,真實主題類,代理類。
抽象主題類:聲明抽象方法。
真實主題類:實現抽象主題中的具體方法,真實目標對象。
代理類:提供了與真實主題相同的接口,其內部含有對真實主題的引用,可以訪問、控制或拓展真實主題的功能。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//定義抽象主題類
function Specialty() {}
Specialty.prototype.display=function () {};
//定義具體主題類
function WySpecialty() {}
WySpecialty.prototype = new Specialty();
WySpecialty.prototype.display = function () {
console.log("特產");
}
//定義代理類
function SgProxy() {}
SgProxy.prototype.preRequest = function () {
console.log("包裝");
}
SgProxy.prototype.postRequest = function () {
console.log("售後");
}
SgProxy.prototype.display = function () {
this.preRequest();
var instance = new WySpecialty();
instance.display();
this.postRequest();
}
var user = new SgProxy();
user.display();
</script>
</body>
</html>
應用場景
- nginx 就是一種代理模式,nginx 配置可將 a 域名的訪問指向 b 域名,也可藉助這一特性來實現跨域。
- 安全代理,不同用戶對真實對象的訪問權限。
應用實例
暫無。
總結
代理模式還是很好理解的。比如消費者一般不會直接與廠家接觸,都是通過代理商或者超市的形式去交易。這樣廠家可以專注於質量,而忽略銷售技巧。用戶也可以省心,有時候可能只需要出一點服務費之類的就可以直接從經銷商拿貨,而不用去廠家挑選。同時經銷商不僅給廠家銷售,還會提供一系列的售後服務、加裝等。經銷商可以在產品的基礎上去衍生一些其他功能。