代理模式Proxy
Posted ocean123123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式Proxy相关的知识,希望对你有一定的参考价值。
public class MainActivity extends AppCompatActivity TextView textView; Button button; protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text); button = findViewById(R.id.button); ProxySubject subject = new ProxySubject(new RealSubject());//客户端 subject.visit(); public interface Subject void visit(); public class RealSubject implements Subject private String name = "byhieg"; @Override public void visit() System.out.println(name); public class ProxySubject implements Subject private Subject subject; public ProxySubject(Subject subject) this.subject = subject; @Override public void visit() subject.visit();
静态代理
public class MainActivity extends AppCompatActivity TextView textView; Button button; protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text); button = findViewById(R.id.button); Subject realSubject = new RealSubject(); DynamicProxy proxy = new DynamicProxy(realSubject); ClassLoader classLoader = realSubject.getClass().getClassLoader(); Subject subject = (Subject) Proxy.newProxyInstance(classLoader, new Class[]Subject.class, proxy); subject.visit(); public interface Subject void visit(); public class RealSubject implements Subject private String name = "byhieg"; @Override public void visit() System.out.println(name); public class DynamicProxy implements InvocationHandler private Object object; public DynamicProxy(Object object) this.object = object; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable Object result = method.invoke(object, args); return result;
动态代理
创建动态代理的对象,需要借助Proxy.newProxyInstance。该方法的三个参数分别是:
ClassLoader loader表示当前使用到的appClassloader。
Class<?>[] interfaces表示目标对象实现的一组接口。
InvocationHandler h表示当前的InvocationHandler实现实例对象。
ClassLoader loader表示当前使用到的appClassloader。
Class<?>[] interfaces表示目标对象实现的一组接口。
InvocationHandler h表示当前的InvocationHandler实现实例对象。
以上是关于代理模式Proxy的主要内容,如果未能解决你的问题,请参考以下文章