zoukankan      html  css  js  c++  java
  • java设计模式:代理模式

    什么是代理模式?

      对于一个类的方法的调用,不直接通过该类的对象来调用方法,程序里有一个专门的代理类,通过调用代理类的方法来实现真实类内部方法的调用。

      特征是:代理类和委托类有同样的接口,代理类主要负责为委托类预处理信息、过滤信息、把信息转发给委托类、以及时候处理信息等。代理类对象类本身并不真正实现服务,而是通过调用委托类的相关对象的方法,来提供特定的服务。

    代理分为静态代理和动态代理

    静态代理:

    /**
     * 1.创建接口
     */
    public interface IUserAccount {
        void getMoney(double money);
    
        void search();
    }
    /**
     * 创建接口实现类
     */
    public class Useroperaton implements IUserAccount{
        @Override
        public void getMoney(double money) {
            System.out.println("小明用户取了"+money+"元");
        }
    
    
        public void getTrueMoney(double money, Date date) {
            System.out.println("小明用户取了"+money+"元,取钱的时间为:"+date);
        }
        @Override
        public void search() {
            System.out.println("小明查询了账户余额");
        }
    }
    /**
     * 代理类要实现代理对象的接口
     */
    public class ProtyDemo implements IUserAccount {
        private Useroperaton useroperaton = null;//被代理类对象
    
        public ProtyDemo(Useroperaton useroperaton) {
            this.useroperaton = useroperaton;
        }
    
        public void getMoney(double money) {
            System.out.println("代理真实方法执行前,切入的代码执行了");
            useroperaton.getTrueMoney(1000,new Date());
            System.out.println("代理真实方法执行后,切入日志保存代码");
        }
    
        @Override
        public void search() {
            useroperaton.search();
        }
    }
    /**
     * 测试方法
     */
    public class Demo {
        public static void main(String[] args) {
            ProtyDemo protyDemo = new ProtyDemo(new Useroperaton());
            protyDemo.getMoney(1000);
        }
    }
    /**
    * 代理模式的优点:
    * 1.可以隐藏代码的真实方法,代码的实现更安全
    * 2.可以在代理类集中的切入某些代码,如日志的切入
    * 缺点:
    * 1.由于在客户端和真是主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
    * 2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
    */
  • 相关阅读:
    【BZOJ 1579】 1579: [Usaco2009 Feb]Revamping Trails 道路升级 (最短路)
    有限广播地址与直接广播地址
    人生苦短之我用Python篇(线程/进程、threading模块:全局解释器锁gil/信号量/Event、)
    SQL基础二
    Ubuntu命令:sudo、shutdown、apt-get、vim
    SQL基础一
    MPLS基础一
    第一章 Linux系统入门
    P4简介:数据平面的编程语言
    人生苦短之我用Python篇(安装第三方库、正则表达式)
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11141934.html
Copyright © 2011-2022 走看看