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.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
    */
  • 相关阅读:
    django从零开始-模板
    django从零开始-模型
    django从零开始-视图
    web基础
    django从零开始-入门
    Pycharm自动添加文件头注释
    django后台密码错误
    module 'sign.views' has no attribute 'search_name'
    TypeError: __init__() got an unexpected keyword argument 't_command'
    pycharm 中的 全局搜索(ctrl+shift+f) 功能无法使用的原因
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11141934.html
Copyright © 2011-2022 走看看