设计模式---代理模式

定义:也成为委托模式。为其他的对象提供代理,以控制对这个对象的访问。
使用场景:当无法或是不想直接访问某个对象时,可以通过一个代理对象来间接的访问。并且为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。也就是代理类和具体的对象类实现相同的接口,具有相同的方法。然后让代理类持有具体的对象类的引用,用代理类进行控制具体类的方法的调用。
区别:使用代理模式,发现和builder模式的代码逻辑基本是相同,但是表现的思想却是不一样。
builder模式是为了减少某个类的方法或属性的暴露。同时因为减少了不必要的方法属性,仅仅提供必要的东西,使得开发者的开发负担降低。
代理模式是为了不直接访问这个对象,提供和这个对象相同的方法属性,这样起到保护这个对象的目的。

代理有两种方式:静态代理和动态代理。
区别:静态代理是在代码运行的时候,代码已经存在。
动态代理是根据java的反射机制动态的生成代理者的对象。代理者根本不需要知道会代理谁。
静态代理:
1.共同的实现的接口,这样保证在代理类和具体类之间的透明性。
设计模式---代理模式
2.具体类
设计模式---代理模式
3.代理类
设计模式---代理模式
4.方法调用
设计模式---代理模式

动态代理,需要实现动态代理的接口InvocationHandler接口,并且重写调用的方法invoke。本质里面还是使用的反射。
动态代理通过一个代理类来代理N多个被代理的对象,实质就是将代理类和被代理类进行分离,使两者之间没有直接的耦合关系。相对而言静态代理能为给定接口下的实现类做代理,如果接口不同,就需要定义不同的代理类,比较复杂。
设计模式---代理模式
设计模式---代理模式