ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-01-10 13:58:02  阅读:241  来源: 互联网

标签:抽象概念 对象 代理 接口 一点点 鸭子 模式 设计模式 结构型


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

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 去一一关闭各个电器。

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有