发现太过于刻意按照计划来写博客,有点不实际,刚好最近在一个网课上复习AOP的知识,讲到了装饰器模式和代理模式,顺便复习总结一下。

首先了解一下装饰器模式,从名字里面可以看出来,装饰器模式就类似于房子装潢吧,比如刚买的毛坯房,只有一个没有门,直接就可以进去。

首先设计一个房子类Room,实现一个进入方法Access

    /// <summary>
/// 抽象接口 用来进行约束
/// </summary>
public interface IAccess
{
void Access();
}
/// <summary>
/// 用户类
/// </summary>
public class Room: IAccess
{
/// <summary>
/// 进入房子操作
/// </summary>
public void Access() {
Console.WriteLine("进房子了");
}
}

那么现在这个类就拥有了进入房子的功能了,那么后期我们需求变更,这个房子加了一个门,那这样我就需要多一个开门的功能了,但是我又不想改变room这个类,那么需要怎么做呢,这个时候就可以用到装饰器模式了

这里定义一个门Door类,添加开门关门方法

    /// <summary>
/// 门类
/// </summary>
public class Door : IAccess
{
Room room; public Door(Room room)
{
this.room = room; }
public void Access() {
OpenDoor();
room.Access();
CloseDoor();
}
public void OpenDoor() {
Console.WriteLine("进门前开门");
}
public void CloseDoor()
{
Console.WriteLine("进门后关门");
}
}

这样,在进入房子的操作外面就加了开门关门两个操作了,然后还没有改变原有的代码结构,这种自由组合的模式,就叫做装饰器模式。

有句话叫组合是优于继承的,我的理解是,继承首先的问题是,类之间的关联是强关联的,属于入侵式,需要改变原有的功能代码结构,但是:添加新功能,不应该影响原有功能。

装饰器模式的好处:灵活、拓展性好、能够在不影响原有业务的情况下添加新的功能。

缺点:增加了系统的复杂度。

应用场景:AOP的实现

 

最新文章

  1. Solr学习总结(一)Solr介绍
  2. android 去掉标题
  3. [译]git status
  4. 在c#中运行js脚本(将js文件生成为.dll文件)
  5. zend 汉化
  6. PHP值mysql操作类
  7. Install wxWidgets-3.0.2 on GNU/Linux Debian
  8. in和exists的区别与SQL执行效率
  9. The File&#39;s Owner
  10. 招行ODC项目表彰
  11. 第01讲- Android背景知识
  12. 浅谈Spring(二)
  13. PowerShell与Unix Shell对比:八大实例
  14. 在.NET Fiddle有趣的沙盒代码
  15. java 实例方法和类方法的区别
  16. bootstrap 轮播模板
  17. JavaScript检测提交表单text合法
  18. Animator 动画第一次播放正常,之后播放都不正常的问题解决
  19. caffe中全卷积层和全连接层训练参数如何确定
  20. 组织安全性SQL

热门文章

  1. laravel 查询数据库first()返回的数据转数组
  2. daoliu平台:测试线路图
  3. POM 标签大全详解
  4. API 设计 POSIX File API
  5. main方法的详解
  6. ISO/IEC 9899:2011 条款6.3.1——算术操作数
  7. ISO/IEC 9899:2011 条款6.4.1——关键字
  8. pytorch常用normalization函数
  9. FastCGI模式编译安装LAMP+Xcache
  10. C# Newtonsoft.Json JObject 操作