设计模式

一、创建型

创建型模式的关注点是“怎样创建对象?”,降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成。

包括:

  • 单例模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
  • 原型模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。
  • 工厂方法模式:定义一个用于创建产品的接口,由子类决定生产什么产品。
  • 抽象工厂模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
  • 建造者模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

二、结构型

描述如何将类或对象按某种布局组成更大的结构。

  • 代理模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

  • 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

  • 桥接模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,降低了抽象和实现这两个可变维度的耦合度。

  • 装饰模式:动态地给对象增加一些职责,即增加其额外的功能。

  • 外观模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。

  • 享元模式:运用共享技术来有效地支持大量细粒度对象的复用。

  • 组合模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

三、设计模式之依赖倒置原则

依赖倒置原则: 通过面向接口的编程来降低类间的耦合性。

核心思想:要面向接口编程,不要面向实现编程。细节具有多变性,而抽象层则相对稳定。因此,以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。

具体实现方法:

  • 每个类尽量提供接口或抽象类,或者两者都具备。
  • 变量的声明类型尽量是接口或者是抽象类。
  • 任何类都不应该从具体类派生。
  • 使用继承时尽量遵循里氏替换原则。

四、设计模式之单一职责原则

单一职责原则:一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分.

一个对象承担了太多的职责的缺点:

  • 一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力;
  • 当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费

核心思想:控制类的粒度大小、将对象解耦、提高其内聚性。

优点优势:

  • 降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。
  • 提高类的可读性。复杂性降低,自然其可读性会提高。
  • 提高系统的可维护性。可读性提高,那自然更容易维护了。
  • 变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。

实现方法:设计人员发现类的不同职责并将其分离,再封装到不同的类或模块。

五、设计模式之开闭原则

开闭原则: 当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。

实现方式:“抽象约束、封装变化”,通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。

六、设计模式之接口隔离原则

接口隔离原则:  将臃肿庞大的接口拆分成更小的和更具体的接口。

实现方法:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

具体说明:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

七、设计模式之迪米特法则

迪米特法则:只与你的直接朋友交谈,不跟“陌生人”说话。

“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

应用场景:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。

具体示例:明星与经纪人的关系实例。

分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人。

发布了87 篇原创文章 · 获赞 8 · 访问量 1万+
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览