通过代理模式实现在RegUser()方法本身业务前后加上一些自己的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor类又能增加新功能

  1. 定义1个用户接口,里面有个注册用户方法

    public interface IUserProcessor
    {
                void RegUser(User user);
    }
  2. 实现用户这个接口

    public class UserProcessor : IUserProcessor
    {
                public void RegUser(User user)
                {
                    Console.WriteLine("用户已注册。Name:{0},PassWord:{1}", user.Name, user.Password);
                }
    }
  3. 代理模式去提供一个AOP功能
    /// <summary>
    /// 代理模式去提供一个AOP功能,既有继承,又有new对象
    /// </summary>
    public class ProxyUserProcessor: IUserProcessor//继承
    {
                private IUserProcessor _UserProcessor = new UserProcessor();//new对象
    
                public void RegUser(User user)
                {
                    BeforeProceed(user);//在你本身业务之前加入一些逻辑
    
                    this._UserProcessor.RegUser(user);//调用构造函数传入的对象执行本身的业务逻辑
                    AfterProceed(user);//在你本身业务之后加入一些逻辑
                }
    
                /// <summary>
                /// 业务逻辑之前
                /// </summary>
                /// <param name="user"></param>
                private void BeforeProceed(User user)
                {
                    Console.WriteLine("方法执行前");
                }
    
                /// <summary>
                /// 业务逻辑之后
                /// </summary>
                /// <param name="user"></param>
                private void AfterProceed(User user)
                {
                    Console.WriteLine("方法执行后");
                }
    }
  4. 调用

    public static void Show()
    {
                User user = new User()
                {
                    Name = "Eleven",
                    Password = "
                };
                IUserProcessor processor = new UserProcessor();
                processor.RegUser(user);
                Console.WriteLine("***************");
    
               processor = new ProxyUserProcessor();
               processor.RegUser(user);
    }

    总结:
    装饰器模式和代理模式很像
    代理模式是内置一个对象,装饰器模式是通过构造函数传入了一个对象
    侧重点不同,装饰器模式可以层层装饰

3.静态AOP实现-代理模式的更多相关文章

  1. Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式

    Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...

  2. AOP基础—代理模式

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...

  3. 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)

    好长时间没有用过Spring了. 突然拿起书.我都发现自己对AOP都不熟悉了. 其实AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问 ...

  4. 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    枚举 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象.这种实例有限而且固定的类,在Java里被称为枚举类. 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编 ...

  5. 代理模式——用AOP测试业务层方法的执行时间

    代理模式 对代理模式的理解,通过http://www.runoob.com/design-pattern/proxy-pattern.html 对AOP的代理模式,参考https://www.cnbl ...

  6. Spring-构造注入&注解注入&代理模式&AOP

    1.   课程介绍 1.  依赖注入;(掌握) 2.  XML自动注入;(掌握) 3.  全注解配置;(掌握) 4.  代理模式;(掌握) 5.  AOP;(掌握) 依赖注入;(掌握) 2.1.  构 ...

  7. Java的代理模式

    最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...

  8. linkin大话设计模式--代理模式

    代理模式是一种应用非常广泛的设计模式,当客户端代码需要调用某个对象的时候,客户端并不关心是否可以准确的得到这个对象,他只要一个能够提供该功能的对象而已,此时我们就可以返回该对象的代理.总而言之,客户端 ...

  9. spring设计模式_代理模式

    代理模式应该是Spring核心设计模式之一了 先说下代理模式特性: 1.有代理人和被代理人 2.对于被代理的人来说,这件事情是一定要做的,但是我又不想做,所有就找代理人来做. 3.需要获取到被代理人的 ...

随机推荐

  1. STM32(HY-SRF05)超声波测距项目

    参考资料: https://www.cnblogs.com/qsyll0916/p/6964638.html http://blog.csdn.net/zhangdaxia2/article/deta ...

  2. js计算本地时间

    获取时间戳: 方法一 var dateTime = new Date();//获取本地时间 var nowTime = dateTime.getTime();//获取本地毫秒,即当前时间 var en ...

  3. Python内置GUI模块Tkinter的几点笔记

    组件属性,用法 组件位置 更多

  4. Python下载及Python最强大IDEPyCharm下载链接

    Python下载: https://www.python.org/downloads/ PyCharm下载: https://www.jetbrains.com/pycharm/download/#s ...

  5. 初学JDBC的一些总结(二)

    一.简单介绍PreparedStatement 和Statement的区别: PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.Prepare ...

  6. js 事件冒泡、捕获;call()、apply()

    他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事件触发顺序是 ...

  7. poj3617 Best Cow Line(贪心,字典序问题)

    https://vjudge.net/problem/POJ-3617 这类字符串处理字典序问题经常用到贪心, 每决定输出一个字符之前,都要前后i++,j--逐个比大小,直至比出为止. #includ ...

  8. pygame-KidsCanCode系列jumpy-part14-背景音乐及音效

    没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效.加载music及sound的方法,之前已经写过,见:pygame 笔记-8 背景音乐&子弹音效 . 先介绍一个很棒的生成各 ...

  9. javaScript系列 [05]-javaScript和JSON

    本文输出和JSON有关的以下内容❐ JSON和javaScript❐ JSON的语法介绍❐ JSON的数据类型❐ JSON和XMLHTTPRequest❐ JSON的序列化和反序列化处理 1.1 JS ...

  10. centos安装系统全过程

    --查看系统 lsb_release -a --查看端口 netstat -lnp|grep 80 ps 进程ID #查看进程的详细信息 kill -9 进程ID --查看Java 版本 java - ...