zoukankan      html  css  js  c++  java
  • 代理模式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实现实例对象。
  • 相关阅读:
    依赖单元测试开发
    今天晚上的遭遇
    设计,UML,测试驱动开发
    我是LIGHT的LP,今天由我代笔
    转贴一篇关于BitVector32的Blog
    看牙记
    调整过的书籍目录
    Queue和Stack的学习代码
    BitVector32结构学习
    Visual Studio 2008 在64位操作系统上调试代码的解决方式
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/11023641.html
Copyright © 2011-2022 走看看