结构型设计模式:
将类和对象组织再一起使用
1,适配器模式:
解决接口的不兼容问题,在不改变原有实现的基础上,将不兼容的接口转换为兼容的接口
适配器可以分为两种:
1,对象适配器:适配器类与适配这是关联关系,即拥有适配器类的成员变量
经常使用,比如JDBC工具类
2,类适配器:适配器类与适配者类是继承关系
GUI的监听器使用的就是类适配器
缺点:会让类的作用变的模糊,不建议使用
使用适配器可以让两个没有关联的类一起使用,提高了代码的复用
2,桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化
将变化分离,不会因为一个变化点而影响别的变化点,降低耦合度
桥接模式实现了抽象与实现的脱耦。他们两个互相独立,不会影响到对方。
如果两个变化相互独立才会使用桥接模式,出现类似笛卡尔积现象的情况使用
3,组合模式:把一组相似的对象作为一个单一的对象
将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使用户对
单个对象和组合的对象的使用具有一致性
让用户处理单个对象和组合对象相同,让对象容器自己实现自身的复杂结构
将一对多的关系转化为一对一的关系,将客户代码和复杂的对象容器结构解耦
封装的更加彻底,用户不需要知道具体实现,只需要调用相应的方法,具体实现不需要了解
让用户忽略组合对象和单个对象的不同,调用简单,节点自由增加
在使用组合模式时,节点都是实现类,违背了依赖倒置原则
4,装饰器模式:允许一个现有的对象添加新的功能,同时又不改变其结构
可以动态的给一个对象添加额外的职责,不使用继承扩展了功能
装饰类和被装饰类可以独立发展,不会相互耦合
使用装饰类代替被装饰类使用,可以实现功能的动态扩展,删除,不会对被装饰类产生影响
易于扩展,解耦合,符合开闭原则
5,外观模式:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
为子系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口
让客户端与系统解耦合,外观类在两者中间进行联系,减少系统的相互依赖
提高灵活性,不符合开闭原则,不易于修改,如果我们需要增加一个接口,外观类就需要改变
外观类与系统耦合度高
使用外观类连接客户与系统,客户只需要调用外观类的方法来实现功能,不必在乎系统的具体实现
但是增加了外观类与系统的耦合度,不易于扩展
6,享元模式:运用共享技术有效的支持大量细粒度的对象
把大量对象中的共同部分抽象出来,如果有相同的业务请求,直接返回在内存中的对象,避免重新创建
类似于池
使用一个容器将对象进行存储,需要某种类型的对象,直接将其取出,如果没有进行创建
并将创建的对象放入容器中
减少了对象的数量,降低了内存,提高了效率,但是也提高了系统的复杂度
在系统中有大量的相似对象时使用,可能会存在线程安全问题
7,代理模式:为其他对象提供一种代理以控制这个对象的访问
在需要访问的对象上增加一个间接层,用户只需要访问间接层对象,间接层对象再去访问
java的动态代理使用的就是代理模式,外界只知道能够实现功能,并需要知道是不是当前对象来实现的
职责请求,便于扩展,再有些情况下会造成请求速度变慢,因为增加了代理对象,需要进行额外的工作