zoukankan      html  css  js  c++  java
  • JAVA-设计模式之代理模式

    1,静态代理模式:

    需要定义接口或者父类,被代理的对象和代理对象一起实现这个接口或者继承父类
    优点:可以做到在不修改目标对象功能的前提下,对目标对象的功能进行扩展
    缺点:一旦接口增加方法,两个都需要改变

    例子:

    接口

    public interface IUserDao{
      void save();
    }

      目标对象

    public class UserDao implements IUserDao{
    							@override
    							public void save(){
    
    						}
    

      代理对象

    public class UserDaoProxy implements IUserDao{
    							private IUserDao target;
    
    							public UserDaoProxy(IUserDao target){
    								this.target=target;
    							}
    
    							@override
    							public void save(){
    								target.save();
    							}
    						}
    

      2,动态代理模式

    代理对象不需要实现接口
    代理对象的生成,利用JDK中的API,动态的在内存中构建代理对象
    JDK中生成动态代理的API:
    java.lang.reflect.Proxy
    使用的方法为:static Object newProxyInstance(ClassLoader cl, Class<?>[] interface, InvokeHandler h)

    动态代理类

    public class ProxyFactory{
    							private Object target;
    
    							public ProxyFactory(Object target){
    								this.target=target;
    							}
    
    							public Object getProxyInstance(){
    								return Proxy.newProxyInstance(
    									target.getClass().getClassLoader(),
    									target.getClass().getInterfaces(),
    									new InvokeHandler(){
    										@override
    										public Object Invoke(Object proxy,Method method,Object[] args) throws Throwable{
    											Object obj = method.invoke(target,args);
    											return obj;
    										}
    									}
    								)
    							}
    						}
    

      

  • 相关阅读:
    码云安装SSH私钥步骤
    关于在Python3中:字典在迭代过程中,字典的长度是不允许改变的
    Selenium ChromeDriver与Chrome版本映射表(更新到v78)
    web driver下载地址(selenium-3.141_浏览器版本对应)
    Python报错pip超时
    LoginRequiredMixin类
    pycharm断点调试django
    js克隆
    索引
    java8date
  • 原文地址:https://www.cnblogs.com/dengyuanqi/p/7641330.html
Copyright © 2011-2022 走看看