2019年03月19日 15:21
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

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

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

  2. public interface IUserProcessor

  3. {

  4.            void RegUser(User user);

  5. }  


  6. 2.实现用户这个接口

  7. public class UserProcessor : IUserProcessor

  8. {

  9.            public void RegUser(User user)

  10.            {

  11.                Console.WriteLine("用户已注册。Name:{0},PassWord:{1}", user.Name, user.Password);

  12.            }

  13. }


  14. 3.装饰器的模式去提供一个AOP功能

  15. /// <summary>

  16. /// 装饰器的模式去提供一个AOP功能,既有继承,又有组合

  17. /// </summary>

  18. public class UserProcessorDecorator : IUserProcessor//继承

  19. {

  20.            private IUserProcessor _UserProcessor { get; set; }//组合

  21.            public UserProcessorDecorator(IUserProcessor userprocessor)//通过构造函数的传入

  22.            {

  23.                this._UserProcessor = userprocessor;

  24.            }

  25.            public void RegUser(User user)

  26.            {

  27.                BeforeProceed(user);//在本身业务之前加入一些逻辑

  28.                this._UserProcessor.RegUser(user);//调用构造函数传入的对象执行本身的业务逻辑

  29.                AfterProceed(user);//在本身业务之后加入一些逻辑

  30.            }

  31.            /// <summary>

  32.            /// 业务逻辑之前

  33.            /// </summary>

  34.            /// <param name="user"></param>

  35.            private void BeforeProceed(User user)

  36.            {

  37.                Console.WriteLine("方法执行前");

  38.            }

  39.            /// <summary>

  40.            /// 业务逻辑之后

  41.            /// </summary>

  42.            /// <param name="user"></param>

  43.            private void AfterProceed(User user)

  44.            {

  45.                Console.WriteLine("方法执行后");

  46.            }

  47. }

    4.调用

    public static void Show()

    {

           User user = new User()

           {

               Name = "Eleven",

               Password = "123123123123"

           };

           IUserProcessor processor = new UserProcessor();

           processor.RegUser(user);

           Console.WriteLine("***************");

           processor = new UserProcessorDecorator(processor);//即不修改UserProcessor类又能增加新功能

           processor.RegUser(user);

    }


发表评论
匿名  
用户评论
暂无评论