通过装饰器模式实现在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功能,既有继承,又有组合
/// </summary>
public class UserProcessorDecorator : IUserProcessor//继承
{
private IUserProcessor _UserProcessor { get; set; }//组合
public UserProcessorDecorator(IUserProcessor userprocessor)//通过构造函数的传入
{
this._UserProcessor = userprocessor;
}
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 = "123123123123"
};
IUserProcessor processor = new UserProcessor();
processor.RegUser(user);
Console.WriteLine("***************");
processor = new UserProcessorDecorator(processor);//即不修改UserProcessor类又能增加新功能
processor.RegUser(user);
}