设计模式:

软件开发过程中,遇到相似问题,将问题的解决方式抽取模型(套路)

单例,工厂,装饰者,适配器,动态代理

谷歌汽车场景:

谷歌汽车场景Car

  • Interface Icar{  start  run  stop}
  • final class GoogleCar implments ICar(){}

希望将谷歌Car接入到生态圈

装饰者设计模式:通过实现同一个接口完成

  • 一个接口Icar,被一个final修饰的GoogleCar实现,被Mycar实现
  • Mycar的构造里面传入Icar:public class MyCar implements ICar {ICar car; public MyCar(ICar car) {this.car = car;}},并且重写Icar的三个方法run,stop,start,里面调用ICar对象的三个方法
  • ICar car = new MyCar(new GoogleCar());实现装饰
  • 场景:二次开发的时候,无法获取源码GoogleCar,无法使用继承的情况下,要对已经存在的对象进行增强
  • 前提:可以获取到被装饰的对象实现的所有接口
  • 弊端:假如被装饰对象实现的接口有几百个方法,那么就要重写几百个方法,造成冗余
  • 解决方法:动态代理

动态代理模式:

原理:通过虚拟机在内存中创建类似MyCar.class文件

1 要创建这个文件,要告诉虚拟机被创建的字节码文件上应该有多少方法

2  告诉虚拟机被创建的字节码上的方法如何来实现

。。。未完待续

 https://www.cnblogs.com/gonjan-blog/p/6685611.html 

最新文章

  1. ffmpeg-20160926[27]-bin.7z
  2. 3D Touch
  3. Photoshop:笔刷制作和安装
  4. 题目1043:Day of Week(输入日期与当前日起天数差%7,在做相关星期调整)
  5. 采用FirePHP调试PHP程序
  6. swift 取消UIButton选中高亮状态
  7. Python之正则表达式(re模块)
  8. hdu2410(水)
  9. 零开始:NetCore项目权限管理系统:基础框架搭建
  10. Html 改变原有标签属性
  11. vue 点击图片放大
  12. docker 15 dockerfile案例-CMD、ENTRYPOINT案例
  13. cocos2dx JS layuot纯代码实现背景颜色渐变
  14. Beta冲刺随笔汇总
  15. Codeforces Round #410 (Div. 2) B
  16. python变量存储和深浅拷贝
  17. [CF1039D]You Are Given a Tree[贪心+根号分治]
  18. 【刷题】BZOJ 4543 [POI2014]Hotel加强版
  19. swap文件查看
  20. Django model字段类型(转)

热门文章

  1. Java IO流详解(三)——字节流InputStream和OutPutStream
  2. Laravel 6.X + Vue.js 2.X + Element UI 开发知乎流程
  3. xml 写sql语句文件头
  4. mysqld: Can't change dir to 'D:\TONG\mysql-5.7.19-winx64\data\' (Errcode: 2 - No such file or directory)
  5. 解决IDEA部署web项目时,jar包拷贝不全的问题
  6. SpringBoot集成Freemarker前端模板
  7. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用
  8. 02.当构造参数过多时使用builder模式
  9. 2 CSS盒子模型&边框&轮廓&外边距&填充&分组嵌套&尺寸&display与visibility
  10. js里用 toLocaleString 实现给数字加三位一逗号间隔(有无小数点都适用)