结构型模式(三) | 青训营

47 阅读2分钟

本系列笔记总结23种设计模式在GO语言中的实现方法,参考了refactoringguru.cn/design-patt… 网站的内容,也包括我自己的理解。如果有理解不对的地方,恳请批评指正。

结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

结构型模式总共有七种:

  1. 适配器模式
  2. 桥接模式
  3. 代理模式
  4. 享元模式
  5. 装饰模式
  6. 外观模式
  7. 组合模式

结构型模式(二) | 青训营中讲了装饰模式和代理模式,与这两种模式相似的还有外观模式。

外观模式

外观模式致力于解决程序复杂、对象繁多,难以理解与维护的问题。

随着项目的不断发展,其内部的对象和接口会变得越来越多,耦合度越来越高。尽管客户端很多时候只需要调用其中的少数接口功能,也必须处理好这些复杂子系统的关系。

外观模式将这个系统封装起来,只暴露部分对外的接口,使得系统内部的复杂细节隐藏起来。

这个思路简单但非常有效,以至于很多人在无意识的情况下就这样设计代码。

当然,外观模式也有缺点,随着项目的不断变大,外观可能成为与所有类耦合的上帝对象。

享元模式

有时候程序中会有很多相似的对象,比如《我的世界》中所有的草方块都有一样的外表,不同的仅仅是它们的坐标。

如果让计算机渲染每一个草方块的结构和画面,这些海量的重复计算会拖垮计算机。

但如果我们将草方块的模型保存到一个享元对象中,原本的草方块对象只记录坐标信息和享元对象的引用,就可以节约大量的资源。

当然,享元对象必须存储的是不可变的公共信息,我们也可以称之为外在状态。更为本质决定对象不同点的称为内在状态。

以上只是我的一点理解,如果有不对的欢迎批评指正!