【设计模式】-结构型模式

前言:

  结构性模式–这类设计模式更关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能的方式;


1、外观模式

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用;
  • 依赖倒转原则和迪米特法则的思想体现,常用模式之一;
  • 实例:很多同学都通过家教锻炼过自己,自己去找家教很费时费力,这时候我们就想到要去找负责提供家教工作的中介人员,这样就省心了好多;
  • 软件系统入口也是外观模式的一种应用;
  • 优点:降低系统与客户端的耦合,提高系统的灵活性,;

2、装饰模式

定义:动态地给一个对象添加一些额外的职责,就增加的功能来说,装饰模式比生成子类更加灵活;
  • 简单理解:

  简单来说装饰模式是为已知动态的添加更多功能的一种方式,当系统需要增加新的功能时,向旧的类中添加新代码,而这些新的代码装饰了原有类的核心责任或主要行为,而这些新加入的东西仅仅是为了满足在某种特定情况下才会执行的特殊行为的需要,

  装饰模式就是把这些装饰的功能存放在单独的类中,并让这个类包装它所要装饰的对象,当执行特殊需要时,客户代码就可以在运行时根据实际需要有选择的、有顺序的使用装饰功能包装对象了;

  • 用途:不想增加很多子类的情况下对类进行扩展;
  • 举例:我们都需要穿衣服,衣服对我们来说既是必需品也是装饰品,根据不同的心情,我们会换不同的服装,还会根据自己的衣服进行自由搭配,然后再呈现出来,搭配并不固定,这也是装饰模式的体现;
  • 优点:简化原有类,职责分离,去除相关重复装饰逻辑;扩展性好;
  • 缺点:多层装饰较复杂

3、代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问;
  • 用途:想要在访问一个类时做一些控制时适用;
  • 举例:每次寒暑假我们都会购买车票,我可以选择去汽车站、火车站买票,也可以在智行、支付宝等代售点,那么这个代售点的设置就是一种代理模式的应用;
  • 优点:职责清晰,扩展性强
  • 缺点:增加系统的实现复杂度

4、适配器模式

定义:将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;类的适配器--适配器与源角色为继承关系,对象的适配器
  • 用途:应用于希望复用一些现存的类,但是接口与复用环境要求不一致的情况;
  • 举例:我们电脑的接口有的是VGA的有的是HDMI的,HDMI接口的同学想要用自己的电脑连接投影仪,这个时候就需要一个转接线,通过这个转接线达到连接投影仪的目的,这里的转接线的应用就是适配器模式的生活应用;
  • 优点:提高了类的复用,灵活性强;
  • 缺点:采用多继承的实现方式,带来不良的高耦合;

5、组合模式

定义:将对象组合成树形结构以表示‘部分-整体’的层次结构,使得用户对单个对象和组合对象的使用具有一致性;
  • 应用:需求中是部分与整体层次的结构时,及希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,考虑用组合模式;
  • 举例:总公司分公司的结构化管理;
  • 优点:结点增加自由
  • 缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则

6、桥接模式

定义:将抽象部分与它的实现部分分离,使他们都可以独立变化;
  • 用途:实现系统可能有多个角度分类,但每一个角度分类都有可能变化;
  • 举例:空调遥控器的使用,每个屋的空调都配有一个相应的遥控器,他们都具备相同的实现,但我们每个屋可以进行不一致的操作实现,在你开关的同时我也可以独立进行风向和大小的调节,这个空调遥控器的使用是桥接模式的一个应用;
  • 优点:易扩展,实现细节对客户透明,隐藏具体实现细节;
  • 缺点:增加系统的理解和设计难度,

7、享元模式

定义:运用共享技术有效地支持大量细粒度的对象
  • 内部状态:在享元对象内部并且不会随环境改变而改变的共享部分;  外部状态:随环境改变而改变的,不可以共享的状态
  • 用途:一个应用程序使用了大量的对象,而这些大量的对象造成了存储开销时;对象大多数的状态可以外部状态,如果上处对象的外部状态,可以用相对较少的共享对象取代很多组对象,这两种情况都需要使用到享元模式;
  • 举例:敲机房的时候有不同的权限,管理员可以修改操作员和用户的信息,而用户只能查看信息,不能进行信息的修改,用户的信息是共享的,管理员登录可以查看用户和操作员的权限和可操作范围;
  • 优点:减少类的实例化和存储空间
  • 缺点:增加系统的复杂度;

小结:

  趁热乎及时总结,只学习不总结感觉并没有学到啥,及时的总结更好的帮助自己理解;

猜你喜欢

转载自blog.csdn.net/qiqibei666/article/details/81224494