一、概念
- 装饰器模式是一种结构型设计模式,装饰器其实就是给对象添加新功能[增加新的函数]。
二、场景
- 扩展一个类的功能。
- 动态增加功能,动态撤销。
三、实现
- 条件
- 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(); } } }
- 支付回调接口类,类名:IPayCallback
四、优缺点
- 优点
- 动态给原有对象添加功能,是原有对象遵守了开闭原则。
- 缺点
- 随着业务量的增多,装饰器类数量也会增多。
- 结构发生了变化,导致复杂性上升。
装饰器模式是一种结构型设计模式,用于在不修改原有对象的基础上动态添加功能。本文通过C#代码示例展示了如何在支付宝支付回调中,利用装饰器模式实现数据保存、短信和邮件通知的动态组合。这种模式的优点在于符合开闭原则,但随着业务增长可能导致类的数量增加和复杂性的提升。
875

被折叠的 条评论
为什么被折叠?



