• 代理模式/proxy模式/结构型模式


    代理模式proxy

    定义

    为其他对象提供一种代理,并以控制对这个对象的访问。最简单的理解,买东西都是要去商店的,不会去工厂。

    java实现三要素 proxy(代理)+subject(接口)+realSubject(实现类)

    1. 定义一个接口
    2. 代理类和实现类均实现1定义的接口
    3. 代理类持有实现类的实例,并在代理类中调用

    代码示例

    //定义共同的接口
    interface Sourceable{
        void method();
    }
    
    //具体实现类
    class Source implements Sourceable {
    	@Override
    	public void method() {
    		System.out.println("执行方法");
    		
    	}
    }
    
    //代理类(持有实现类实例)
    class SourceProxy implements Sourceable{
    	
    	Sourceable sourceable;
    	public SourceProxy(){
    		super();
    		sourceable=new Source();
    	}
    
    	@Override
    	public void method() {
    		System.out.println("代理前....");
    		sourceable.method();
    		System.out.println("代理后....");
    	}
    } 
    

    优点

    1. 代理模式可以实现对类的扩展,结构型模式,符合OCP原则
    2. 用户权限(根据权限分配资源)、数据库访问(隐藏数据库链接)等
    3. 一定程度上降低了使用者和实现者的耦合关系

    缺点

    在调用者和实现者之间增加了代理者,造成了额外的系统开销。

    JDK中的代理模式

    java.lang.reflect.Proxy,反射包中的代理类,Proxy类提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
    创建某一接口 Foo 的代理可以简单的调用:

    Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class[] { Foo.class }, handler);  
    
    //JDK源码中newProxyInstance方法的声明
        /**
         * Returns an instance of a proxy class for the specified interfaces
         * that dispatches method invocations to the specified invocation
         * handler.
        **/
        public static Object newProxyInstance(ClassLoader loader,   Class<?>[] interfaces,  InvocationHandler h) throws IllegalArgumentException
    


    I am a slow walker, but I never walk backwards.



  • 相关阅读:
    iOS学习05C语言函数
    iOS学习04C语言数组
    iOS学习03C语言循环结构
    iOS学习02C语言分支结构
    iOS学习01C语言数据类型
    Objective-C学习——中文URL编码和解码
    Objective-c 字面量
    SDWebImage
    mac的svn之cornerstone简易教程
    javascript 和oc交互
  • 原文地址:https://www.cnblogs.com/lknny/p/5804311.html
Copyright © 2020-2023  润新知