定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。
代理对象:起到中介作用
好处:新增额外功能不用改变真实对象类,比如真实对象仅仅买了个礼物,现在打算新增包装礼物功能,就可以用静态代理方式,创建代理对象,里面封装真实对象买礼物,额外做包装礼物功能
缺点:
- 由于在客户端(使用时)和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢
- 1个静态代理只服务1种类型的目标对象,如果目标对象较多情况下,若采用静态代理,则会出现静态代理对象量多,代码量大,从而导致代码复杂问题
操作原理:创建抽象对象接口,即真实对象和代理对象都要实现的接口,然后在代理对象实现和真实对象实现一样的方法中,引用或者创建真实对象,调用真实对象的方法,然后代理对象额外做一些操作。
示例代码:
步骤1、创建抽象对象接口(Subject):声明你(真实对象)需要让代购(代理对象)帮忙做的事(买Mac)
interface Subject {
void buyGift();
}
步骤2、创建真实对象
class RealSubject implements Subject {
@Override
public void buyGift() {
System.out.println("我要买一份礼物");
}
}
步骤3、创建代理对象,并通过代理类创建真实对象示例访问其方法,再额外加功能
class ProxySubject implements Subject {
@Override
public void buyGift() {
RealSubject realSubject = new RealSubject();
realSubject.buyGift();
//额外操作
System.out.println("礼物进行包装");
}
}
步骤4、开始使用
public class StaticProxyDemo {
public static void main(String[] args){
Subject subject = new ProxySubject();
subject.buyGift();
}
}
参考:https://www.jianshu.com/p/a8aa6851e09e