通过代理模式实现在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. 如何使用 ccs7.2调试代码

    首先将单片机连接在电脑USB口上 或者 或者F11快捷键 如果编译通过的话,会是这个样子 F11调试后会停在主函数开始处 第一个黄绿组合的按钮就是继续调试,快捷键为F8,按F8后它会停在断点处,如果为 ...

  2. Java基础知识--内存管理

    Java语言中 的垃圾收集器相对于以前的其他语言优势是什么? 过去的语言需要程序员显示的进行分配内存.释放内存.这种做法可能会引起“内存泄漏”,即由于某种原因是分配给程序的内存无法释放,如果该任务不断 ...

  3. c语言单片机中断服务程序

    #include <reg52.h> #define uchar unsigned char #define uint unsigned int uint count; void dela ...

  4. 【状压dp】Trie 树 @中山纪念中学20170304

    目录 Trie 树 PROBLEM 题目描述 输入 输出 样例输入 样例输出 SOLUTION CODE Trie 树 PROBLEM 题目描述 字母(Trie)树是一个表示一个字符串集合中所有字符串 ...

  5. jQuery Distpicker插件 省市区三级联动 动态赋值修改地址

    在获取创建页面数据后需要在编辑页面调取之前提交的数据,在使用这个插件后发现无法动态赋值,查找资料后发现需要先销毁实例,$(’#target’).distpicker(‘destroy’); 第一步 引 ...

  6. JavaWeb中过滤器Filter的使用示例

    https://github.com/YouXianMing/Java-Web-Study/tree/master/Servlet-Filter 过滤器示例基于以下流程 测试效果如下 web.xml配 ...

  7. nltk 的分词器punkt: ssl问题无法下载

     报错: LookupError: ********************************************************************** Resource pu ...

  8. 解决IE11 Array没有find的方法

    IE9以上版本都对 Array中的大部分方法进行了支持,然而在一次浏览器兼容性测试时发现,IE11浏览器不支持Array.find方法 然后查看了一下IE Edge之前的版本是不支持,所以我自己实现了 ...

  9. 经纬度编码方法推荐-plus code简介

    今天罗孚为大家推荐一种经纬度编码的方法--plus code,原名open location code,是Google于2014年发明的,旨在将表示地理位置的经纬度通过算法推导成一个字符串. plus ...

  10. 【ASP.NET Core】浅说目录浏览

    何谓“浅说”?就是一句话说不完,顶多两句话就介绍完毕,然后直接给上实例的解说方式.化繁为简,从七千年前到现在,从老祖宗到咱们,一直都在追求的理想目标,尽可能把复杂的东西变成简单的. 老周告诉你一个可以 ...