对结构型设计模式之间区别的一点点认识

前提是对设计模式有一定的认识。

1.代理模式
含义

通过继承的方式,控制外界对原对象的访问。代理模式要求代理对象和原对象实现相同的接口(Cglib 通过继承原对象的类实现)。

外界对其不可感知,不知道其实是访问经过了代理对象,到达实际对象。对于外界来讲,只知道代理对象;对于内部来讲,被代理对象所有行为都被拦截,不可以替换、不可以通过外部传入被代理对象。

意图

代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。主要增强的是非主干或者说非业务性的功能。

比如事务、日志记录、数据库连接等等。

2.桥接模式
含义

两个具备多种变化(即多种实现)的类体系之间的解耦,方便两个体系的扩展导致类膨胀的问题。聚合的实际是两个类体系的最顶上的抽象概念。

两个类体系都可以自有扩展,而不影响原来的使用。因为都是聚合了抽象概念的类或接口。

注:抽象概念代表的不是单一的类或接口,实际是被抽象出的一组可扩展的类库。

原则:“依赖倒转原则"与"开闭原则”。

意图

更关注的是两个体系之间其实是一种整体和部分的关系。

比如《headfirst 设计模式》中提到的鸭子和叫声的关联。定义了鸭子的抽象概念,组合了叫声的抽象概念。

一个鸭子的实现,组合了一种叫声的实现,还可以替换,皮不皮。

  • A 鸭子有 “6“ 叫声,会 “666666”。

  • B 鸭子有 D 叫声,会“dd,各位都是dd”。

鸭子和叫声之间都可以自有扩展、组合。

  • 给 A 鸭子也来个 “6“呗,完全没问题。
3.组合模式

类似于 UML 中组合的关系,是一种整体和部分不可分割的概念。

最关键的点,在于使客户端以一致的方式对待单个对象和对象组合。注:实现相同接口

比如命令和宏命令,客户端只在乎执行命令,内部如何执行是命令自己的事。

4.装饰器模式
意图

对原始类功能的增强,是和原功能有相同业务含义的。

装饰类和原对象都继承了同样的对象,并通过聚合的方式管理被装饰的对象或对象组。

方式:继承或关联

原则:组合复用、开闭原则

5.适配器模式

这个区别,最好得去使用意图上去区分。字面理解,认为是为了解决使用类和被使用类之间(比如说项目与第三方类库之间)不兼容的问题而使用的。主要提供跟原始类不同的接口

像代理和装饰,都是与原始类相同的接口

原则:开闭。

意图

举个不是贴切的例子,第三方接口某个参数使用 String 类型,而在项目中这个对应概念是 Long 类型。通过适配器模式,得到一个适配接口。项目使用这个接口传入 Long,然后内部转化为 String 再调用第三方接口。

为了不让这部分没有业务意义的代码影响业务代码,从而使用。

6.门面模式

防止使用者与多个子系统之间的耦合,通过 Facade 提供完整意义的功能并屏蔽掉复杂的调用关系。

原则: “迪米特原则”。

意图

比如出门 ,要关闭灯、空调、暖气、音箱等等电器。使用者需要一一关闭各个电器,而通过 Facade 提供一个总开关接口,通过 Facade 去一一关闭各个电器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值