1.装饰器模式的定义(保持接口,扩展功能)

  Decorate装饰器,顾名思义,就是动态的给一个对象添加一些额外的职责,就好比对房子进行装修一样。

2.装饰器模式的特征

  具有一个装饰对象。

  必须拥有与被装饰对象相同的接口。

  可与给被装饰对象添加额外的功能。

3.装饰器模式的典型应用,java.io包

4.装饰器模式的代码示例

/**
* @Author long
* @Date 2019/3/20 21:29
*/
public interface SourceAble { void operation();
}
/**
* @Author long
* @Date 2019/3/20 21:31
*/
public class Source implements SourceAble { @Override
public void operation() {
System.out.println("Source最原始的方法");
}
}
/**
* @Author long
* @Date 2019/3/20 21:32
*/
public class SourceDecorateA implements SourceAble { private SourceAble sourceAble; public SourceDecorateA(SourceAble sourceAble){
this.sourceAble = sourceAble;
} @Override
public void operation() {
System.out.println("SourceDecorateA before");
sourceAble.operation();
System.out.println("SourceDecorateA after");
}
}
/**
* @Author long
* @Date 2019/3/20 21:34
*/
public class SourceDecorateB implements SourceAble { private SourceAble sourceAble; public SourceDecorateB(SourceAble sourceAble){
this.sourceAble = sourceAble;
} @Override
public void operation() {
System.out.println("SourceDecorateB before");
sourceAble.operation();
System.out.println("SourceDecorateB after");
}
}
/**
* @Author long
* @Date 2019/3/20 21:48
*/
public class App { public static void main(String[] args) {
SourceAble source = new Source();
source.operation();
System.out.println("================");
SourceAble decorateA = new SourceDecorateA(source);
decorateA.operation();
System.out.println("================");
SourceAble decorateB = new SourceDecorateB(decorateA);
decorateB.operation();
}
}

Source最原始的方法
================
SourceDecorateA before
Source最原始的方法
SourceDecorateA after
================
SourceDecorateB before
SourceDecorateA before
Source最原始的方法
SourceDecorateA after
SourceDecorateB after

 

最新文章

  1. Chrome DevTools的15个使用技巧【转载】
  2. NBUT比赛 方格规律递推题
  3. [NOIP2010] 普及组
  4. MVC4.0 使用Form认证,自定义登录页面路径Account/Login
  5. 64位Windows7升级IE11后无法启动的解决办法
  6. 【转】Android fill_parent和wrap_content分析
  7. Java中的Annotation(2)----Annotation工作原理
  8. Echart..js插件渲染报错 data.length<1?
  9. Java基础知识强化76:正则表达式之替换功能
  10. 武汉科技大学ACM :1005: C语言程序设计教程(第三版)课后习题6.6
  11. 利用 squid 反向代理提高网站性能
  12. 【Android Developers Training】 97. 序言:访问通讯录数据
  13. 登山(Climb)
  14. crontab定时任务一定要记得做好备份
  15. C++笔记003:从一个小程序开始
  16. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(六)一定要RESTful吗?
  17. 在MVC应用程序中,怎样删除上传的文件
  18. ifeq endif
  19. hdu 5185 dp(完全背包)
  20. LoadRunner小技巧集锦

热门文章

  1. MyCP(课下作业,必做)
  2. Spring Cloud 入门教程(七): 熔断机制 -- 断路器
  3. 微信小程序开发教程 #043 - 在小程序开发中使用 npm
  4. python2.7.14安装部署(Linux)
  5. svnsync同步svn
  6. web 日历 任务 插件
  7. 如何去掉wordpress网站url里面的index.php(Apache服务器)
  8. Linux 学习 (七) 挂载命令 & 用户登陆查看
  9. Nginx 处理Http请求简单流程
  10. Django ORM操作补充