设计模式之装饰器模式

装饰器模式是一种结构型设计模式,用于在不修改原有对象的基础上动态添加功能。本文通过C#代码示例展示了如何在支付宝支付回调中,利用装饰器模式实现数据保存、短信和邮件通知的动态组合。这种模式的优点在于符合开闭原则,但随着业务增长可能导致类的数量增加和复杂性的提升。

一、概念

  • 装饰器模式是一种结构型设计模式,装饰器其实就是给对象添加新功能[增加新的函数]。

二、场景

  • 扩展一个类的功能。
  • 动态增加功能,动态撤销。

三、实现

  • 条件
    • C#
  • 场景
    • 以支付宝支付完成后,数据信息保存到数据库,并发送短信息以及发送邮件到邮箱为例。
  • 代码实现
    • 支付回调接口类,类名:IPayCallback
          using System;
          
          namespace Demo
          {
              interface IPayCallback
              {
                    void Handler();
              }
          }    
      
    • 支付回调实现类,类名:AlipayCallback
          using System;
          
          namespace Demo
          {
              class AlipayCallback:IPayCallback
              {
                   public void Handler()
                   {
                      System.Console.WriteLine("支付完成,保存数据信息!");
                   }
              }
          }    
      
    • 抽象属性类,类名:AbstractCallback
          using System;
          
          namespace Demo
          {
             abstract class AbstractCallback
              {
                  public IPayCallback callback{get;set;}
              }
          }    
      
    • 信息发送类,类名:SmsCallback
          using System;
          
          namespace Demo
          {
              class SmsCallback:AbstractCallback,IPayCallback
              { 
                   public  void   Handler()
                   {
                       System.Console.WriteLine("信息装饰器");
                       callback.Handler();
                       SendInfomation();
                   }
          
                   public void SendInfomation ()
                   {
                      System.Console.WriteLine("信息发送成功");
                   }
              }
          } 
      
    • 邮件发送类,类名:MailCallback
          using System;
          
          namespace Demo
          {
              class MailCallback:AbstractCallback,IPayCallback
              {
                  
                   public  void   Handler()
                   {
                       System.Console.WriteLine("邮件装饰器");
                       callback.Handler();
                       SendInfomation();
                   }
          
                   public void SendInfomation ()
                   {
                      System.Console.WriteLine("邮件发送成功");
                   }
              }
          }    
      
    • 入口函数类,类名:Program
          using System.Net.Mail;
          using System;
          
          namespace Demo
          {
              class Program
              {
                  static void Main(string[] args)
                  {
                     //保存数据信息并保存
                     SmsCallback sms = new SmsCallback();
                     sms.callback = new AlipayCallback();
                     sms.Handler();
                     System.Console.WriteLine("-------------------------------------------------------------------");
                     //保存数据,并发送邮件信息
                     MailCallback  mail = new MailCallback();
                     mail.callback = new AlipayCallback();
                     mail.Handler();
                     System.Console.WriteLine("-------------------------------------------------------------------");
                     //保存数据,发送信息并发送邮件
                     SmsCallback sms1 = new SmsCallback();
                     sms1.callback = new AlipayCallback();
          
                     MailCallback  mail1 = new MailCallback();
                     mail1.callback = sms1;
                     mail1.Handler();
                  }  
              }
          }    
      

四、优缺点

  • 优点
    • 动态给原有对象添加功能,是原有对象遵守了开闭原则。
  • 缺点
    • 随着业务量的增多,装饰器类数量也会增多。
    • 结构发生了变化,导致复杂性上升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值