代理模式的优点
(1)减少直接访问的复杂性。(2)对业务进行增强。
java代理的实现
接口:提供服务的抽象。举例工厂的功能(生产服装,饮料)等。
实体类(实现接口):提供实际的服务。举例服装厂,饮料厂等。
代理类(包含实体类或者实体类的父类):实现InvocationHandler,构造getProxy(Proxy构造代理的实现类)。举例本地的渠道商,他们有厂家的联系方式。(说明:Invoca:用作增强方法;Proxy:用作代理调度器(动态))
以上3条为代理模式实现的最最核心。
静态代理
代理类直接实现工厂接口和包含厂家,就可以直接调用厂家的方法实现外部的需求。适用于简单的场景,扩展和维护性差(违反开闭原则)。
动态代理
代理类包含实体类的父类或者Object,通过Proxy动态构造类,扩展和维护性好。
动态代理的表现形式:编写(代理类在添加需求的场景中无需修改),运行($Proxy+num的名称代表该类为动态代理类)。
动态代理的本质:在内存中根据代码自动生成字节码->类对象->并进行实例化-->gc。
扩展
java字节码来源:硬盘(java -jar ...); 网络(tomcat热更新); 内存(动态代理)。
java的本质只有Object,byte[]两种对象。