Gof23种设计模式 —— 结构型模式总结和比较

2020年8月14日10:18:46 评论 50

结构型设计模式总结

设计模式 一句话归纳 目的 生活案例 框架源码举例
代理模式 没有资源没时间,得找媒婆 增强职责 媒婆 Spring ProxyFactoryBean、
Spring JdkDynamicAopProxy、
Spring CglibAopProxy
门面模式 打开一扇门,走向全世界 统一访问入口 前台 Spring JdbcUtils、
Tomcat RequestFacade
装饰器模式 他大舅他二舅,都是他舅 灵活扩展、同宗同源 煎饼 JDK BufferedReader、
JDK InputStream
享元模式 优化资源配置,减少重复浪费 共享资源池 全国社保联网 JDK String、Integer、ObjectPool
组合模式 人在一起叫团伙,心在一起叫团队 统一整体和个体 组织架构树 JDK HashMap、
Mybatis SqlNode
适配器模式 适合自己的,才是最好的 兼容转换(求同存异) 电源适配 Spring AdvisorAdapter、
Spring MVC HandlerAdapter
桥接模式 约定优于配置 不允许用继承 JDK DriverManager

结构型模式描述如何将类和对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构,从程序的结构上解决模块之间的耦合问题。

结构型模式可以分为类结构型模型和对象结构型模型。

两者之间的区别是:类描述如何通过继承提供更有用的接口,而对象描述的是通过适用对象的组合或将对象包含在别的对象里面以获得更有用的结构。

Gof23种设计模式 —— 结构型模式总结和比较

适配器模式

Gof23种设计模式 —— 结构型模式总结和比较

例子:姚明需要一个翻译来翻译教练与队友的语言

就是将两个只有接口不相符的对象利用适配器连接起来(可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们)理解:翻译者在重写的方法内调用被翻译者的方法来告诉他该执行什么。

适用性:想要使用一个已经存在的类的时候,它的接口不符合你的要求

桥接模式

Gof23种设计模式 —— 结构型模式总结和比较

例子:不同品牌的手机基本应用软件不兼容

因为这个模式的类图中两个抽象类之间有一个聚合线,就像是两者之间的一座桥一样,因而得名桥接模式

桥接模式是通过合成/聚合复用原则将抽象部分与他的显示部分分离,使他们都可以独立的变化,从而降低了他们之间的耦合度。所以两者还用到了开放—封闭原则

装饰模式

例子:穿衣服

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

代理模式

Gof23种设计模式 —— 结构型模式总结和比较

定义:给某个对象提供一个代理对象,并由代理对象控股之原对象的引用。(中介)

例子:我想卖房,然后把房子托付给中介

适用:一个用户不想或者使不能直接引用一个委托对象,而代理对象可以在客户类和委托对象之间起到中介的作用,特征代理类和委托类实现相同的接口。

享元模式

在享元模式中可以共享的相同内容称为 内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为 外部状态(Extrinsic State),其中外部状态和内部状态是相互独立的,外部状态的变化不会引起内部状态的变化。由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同的对象可以具有一些不同的特征,而相同的内部状态是可以共享的。也就是说,享元模式的本质是分离与共享分离变与不变,并且共享不变。把一个对象的状态分成内部状态和外部状态,内部状态即是不变的,外部状态是变化的;然后通过共享不变的部分,达到减少对象数量并节约内存的目的。

外观模式

例子:炒股。

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口似的这一子系统更加容易使用(Facade它需要了解所有的子系统的方法或属性,进行组合,以备外界调用)提供接口降低耦合,减少类与类之间的依赖,利于维护。

目的:不是给于系统添加新的功能接口,而是为了让外部减少于子系统内多个模块的交互,松散耦合,从而让外部能够简单的使用子系统。

本质:封装交互,简化调用

组合模式

Gof23种设计模式 —— 结构型模式总结和比较

例子:公司、分公司、办事处、部门

将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

1、组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。

2、所谓组合模式,其实说的是对象包含对象的问题,通过组合的方式(在对象内部引用对象)来进行布局,这种组合是区别于继承的,而另一层含义是指树形结构子节点的抽象(将叶子节点与数枝节点抽象为子节点),区别于普通的分别定义叶子节点与数枝节点的方式。


7种结构型模式

Gof23种设计模式(6)——适配器模式(Adapter)
Gof23种设计模式(7)——桥接模式(Bridge)
Gof23种设计模式(8)——组合模式(Composite)
Gof23种设计模式(9)——装饰器模式(Decorator)
Gof23种设计模式(10)——外观模式(Facade)
Gof23种设计模式(11)——享元模式(Flyweight)
Gof23种设计模式(12)——代理模式(Proxy)
Gof23种设计模式 —— 结构型模式总结和比较

回到总目录Gof23种设计模式(全解析)

参考自:https://www.jianshu.com/p/672deb79d37b
https://blog.csdn.net/zjx828/article/details/88855952

素课网
  • 本文由 发表于 2020年8月14日10:18:46
  • 转载请注明:https://www.suketech.com/9276.html
设计模式:面向对象设计的六大原则 - 总结 设计模式

设计模式:面向对象设计的六大原则 – 总结

开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: