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实现实例对象。
  • 相关阅读:
    hdu 1443 Joseph 约瑟夫环
    hdu 1568 Fibonacci 对数。。
    UILineBreakMode
    Android RelativeLayout 动态添加组件
    iOS 让view触发点击事件
    读取plist文件数据
    [转]Android获取SD卡视频音频文件
    ubuntu下vim修复
    DMO(DirectX Media Object)的工程创建过程及其调用方式
    《Windows程序设计》笔记 —— Chapter One
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/11023641.html
Copyright © 2011-2022 走看看