Java设计模式精讲—课程笔记6(第12章 适配器模式 + 第13章 享元模式 + 第14章 组合模式)

12 适配器模式讲解+Coding+源码解析

12.1 适配器模式讲解

  1. 定义:将一个类的接口转换成客户期望的另一个接口;
    使原本接口不兼容的类可以一起工作;
    类型:结构型;
  2. 适用场景:
    已经存在的类,它的方法和需求不匹配时(方法结果相同或相似);
    不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案;
  3. 优点:
    能提高类的透明性和复用,现有的类复用但不需要改变;
    目标类和适配器类解耦,提高程序扩展性;
    符合开闭原则;
  4. 缺点:
    适配器编写过程需要全面考虑,可能会增加系统的复杂性;
    增加系统代码可读的难度;
  5. 扩展:
    对象适配器:符合组合复用原则,使用委托机制;
    类适配器:通过类继承实现;
  6. 相关设计模式:
    适配器模式和外观模式:都是对现有类、现存系统的封装,外观定义了新的接口,适配器复用了原有的接口;适配器使两个已有的系统协同工作,外观给现有系统提供了更方便的访问入口;外观模式用来适配整个子系统,力度更大。

12.2 适配器模式coding

  1. 类适配器模式:通过继承;
    对象适配器模式:通过组合;
  2. 类适配器:
    在这里插入图片描述
    在这里插入图片描述
  3. 对象适配器:
    在这里插入图片描述
    在这里插入图片描述
  4. 案例:
    选取对象适配器:继承和组合优先选择组合;

12.3 适配器模式源码解析(jdk+spring+springjpa+spingmvc)

  1. jdk:XmlAdapter
    spring:AdvisorAdapter
    springjap:JpaVendorAdapter
    springmvc:HandlerAdapter

13 享元模式讲解+Coding+源码解析

13.1 享元模式讲解

  1. 定义:提供了减少对象数量从而改善应用所需的对象结构的方式;
    运用共享技术有效地支持大量细粒度的对象;
    类型:结构型;
    (减少创建对象的数量,减少内存的占用,提高性能)
  2. 适用场景:
    常常应用于系统底层的开发,以便解决系统的性能问题;
    系统有大量相似对象、需要缓冲池的场景;
  3. 优点:
    减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率;
    减少内存之外的其他资源占用(时间、文件句柄、窗口句柄等);
  4. 缺点:
    关注内/外部状态、关注线程安全问题;
    使系统、程序的逻辑复杂化;
  5. 享元-扩展:
    内部状态:在享元对象内部,且不随环境改变而改变的共享部分,类似于属性;
    外部状态:记录在享元对象外部,会随环境变化;
  6. 享元-相关设计模式:
    享元模式和代理模式:代理模式要代理一个类,如果生成代理类花费的时间和资源较多,可用享元模式提高速度;
    享元模式和单例模式:容器单例:享元模式和单例模式的结合;

13.2 享元模式Coding

  1. department:外部状态(声明在外部,依赖于外部传入参数);
    内部状态:Manager title,不随外部变化而变化;
    在这里插入图片描述
    在这里插入图片描述
  2. 使用享元模式时,要关注线程安全问题;根据实际业务场景取舍;
    (HashMap:未做到线程安全;)

13.3 享元模式源码解析(jdk+tomcat)

  1. Integer
    在这里插入图片描述
    在这里插入图片描述
    缓存存储:-128 – 127;
  2. Tomcat:GenericObjectPoolConfig

14 组合模式讲解+Coding+源码解析

14.1 组合模式讲解

  1. 定义:将对象组合成树形结构以表示“部分—整体”的层次结构;
    组合模式使客户端对单个对象和组合对象保持一致的方式处理;
    类型:结构型;
    在这里插入图片描述
  2. 适用场景:
    希望客户端可以忽略组合对象与单个对象的差异时;
    处理一个树形结构时;
  3. 优点:
    清楚地定义分层次的复杂对象,表示对象的全部或部分层次;
    让客户端忽略了层次的差异,方便对整个层次结构进行控制;
    简化客户端代码;
    符合开闭原则;
  4. 缺点:
    限制类型时会较为复杂;
    使设计变得更加抽象;
  5. 相关设计模式:
    组合模式和访问者模式:组合应用,使用访问者模式访问组合模式中的递归结构

14.2 组合模式Coding

在这里插入图片描述
在这里插入图片描述

  1. 未实现的方法:在父类中设计了抛出异常;

14.3 组合模式源码解析(jdk+mybatis)

  1. java.awt.Component
    Hashmap
    java.util.ArrayList
  2. mybatis:SqlNode,WhereSqlNode;
    在这里插入图片描述
    在这里插入图片描述
  3. 组合模式关键:叶子对象和组合对象要实现相同的接口,或继承相同抽象类,从而实现一致的处理;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值