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实现实例对象。
  • 相关阅读:
    jQuery学习之------对标签属性的操作
    jQuery学习之------选择器
    PHP读取mysql中的数据
    sql server 数据库创建链接服务器访问另外一个sql server 数据库
    SQLServer使用链接服务器远程查询
    解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法
    Delphi XE10百集视频教程计划
    Windows 版本的iTunes 修改iPhone的备份路径
    Centos7 下mysql 密码重置
    Windows server 2012文件服务器配置
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/11023641.html
Copyright © 2011-2022 走看看