场景引入
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。生活中就是:你去买电脑,不会直接去厂家进行购买,而会去专卖店或者零售店进行购买,此时专卖店或者零售店就是代理对象,他给你进行购买电脑的操作。
关键
- 代理对象中存在由被代理的对象,就好比专卖店有你要的电脑
- 代理对象和实际对象继承相同的方法
模式优点
-
代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
-
代理对象可以扩展目标对象的功能;
-
代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;
模式缺点
-
在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
-
增加了系统的复杂度;
代码实现
Factory interface
public interface Factory {
void produce();
}
IphoneFactory.class
public class IphoneFactory implements Factory{
@Override
public void produce() {
System.out.println("苹果厂生产收集,被获取");
}
}
Tmall.class
public class Tmall implements Factory{
Factory factory;
public Tmall(Factory factory) {
this.factory = factory;
}
@Override
public void produce() {
System.out.println("我是天猫经销商,现在我代理苹果收集");
factory.produce();
System.out.println("成功销售收集,赚取差价美滋滋");
}
}
Test.class
public class Test {
public static void main(String[] args) {
Tmall tmall = new Tmall(new IphoneFactory());
tmall.produce();
}
}