其他分享
首页 > 其他分享> > 对结构型设计模式之间区别的一点点认识

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

作者:互联网

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

1.代理模式

含义

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

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

意图

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

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

2.桥接模式

含义

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

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

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

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

意图

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

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

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

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

3.组合模式

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

4.装饰器模式

意图

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

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

方式:继承或关联

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

5.适配器模式

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

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

原则:开闭。

意图

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

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

6.门面模式

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

原则: “迪米特原则”。

意图

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

标签:抽象概念,对象,代理,接口,一点点,鸭子,模式,设计模式,结构型
来源: https://blog.csdn.net/jiangxiayouyu/article/details/112427294