代理模式
代理模式(Proxy Pattern)给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。
代理模式是一种对象结构型模式。
示意图
示例代码
typescript
interface Subject {
request(): void;
}
class RealSubject implements Subject {
public request() {
console.log('RealSubject: Handling Request.');
}
}
class Proxy implements Subject {
private realSubject: RealSubject;
constructor(realSubject?: RealSubject) {
this.realSubject = realSubject || new RealSubject();
}
public request() {
this.realSubject.request();
}
}
// usage
const proxy = new Proxy();
proxy.request();
interface Subject {
request(): void;
}
class RealSubject implements Subject {
public request() {
console.log('RealSubject: Handling Request.');
}
}
class Proxy implements Subject {
private realSubject: RealSubject;
constructor(realSubject?: RealSubject) {
this.realSubject = realSubject || new RealSubject();
}
public request() {
this.realSubject.request();
}
}
// usage
const proxy = new Proxy();
proxy.request();
优缺点
优点
- 能够控制对原始对象的访问。
- 可以隐藏原始对象,从而在客户端和目标对象之间建立一个间接层,这样就能够将客户端与目标对象分离,在一定程度上降低了系统的耦合度。
缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如:调试跟踪型的代理模式。
使用场景
- 在面向对象系统中,有些对象由于某种原因(比如对象创建开销很大,或者需要安全控制等)直接访问会给使用者或者系统结构带来很多麻烦,通过一个称之为“代理”的第三者来实现间接引用,这样可以在不修改原有系统结构的基础上引入新的系统行为。