系统架构师(十)设计模式

对被用来在特定场景下解决一般设计问题的类和互相通信的对象的描述。通俗地说,可以把设计模式理解为对某一类问题的通用解决方案。
设计模式是一种通用的解决方案,而不是具体的,也不是唯一的。
设计模式主要解决对象之间相互通信、相互依赖的结构关系

设计原则:

  • 单一职责原则:设计目的单一的类
  • 开放—封闭原则:对扩展开放,对修改封闭(多扩展,少修改)
  • 李氏替换原则:子类可以替换父类
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的
  • 迪米特原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解

设计模式

面向对象设计模式

(1)架构模式:
是软件设计中的高层决策,例如C/S结构就属于架构模式;反映了开发软件系统过程中所做的基本设计决策

(2)设计模式:
主要关注软件系统的设计,与具体的实现语言无关,是在软件开发过程中,经过验证的,用于解决在特定环境下的、重复出现的、特定问题的解决方案

(3)惯用法:
是最底层的模式,关注软件系统的设计与实现,实现时通过特定的程序设计语言来描述构件与构建之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如c++语言的惯用法就是:引用–计数

设计模式的分类

设计模式是面向问题的,即每一种设计模式都是为了解决一种特定类型的问题。因此,根据设计模式要解决的问题将设计模式分为三类,分别为创建型、结构型和行为型。

如何管理系统中的对象、如何组织系统中的类与对象、系统中的类与对象如何相互通信。这三类设计模式分别解决了这三个方面的问题。
在这里插入图片描述

创建型设计模式主要解决对象创建的问题。

  • Factory Method 模式: 提供了一种延迟创建类的方法,可以在运行期由子类决定创建哪一个类的实例。
  • Abstract Factory 模式: 抽象工厂模式,主要为解决复杂系统中对象创建的问题。提供了一个一致的对象创建接口来创建一系列具有相似基类或相似接口的对象。
  • Builder 模式: 逐步地构造出一个复杂对象,并在最后返回对象的实例。可以把复杂对象的创建与表示分离,使得同样的创建过程可以创建不同的表示。
  • Prototype 模式: 可以根据原型实例制定创建的对象的种类,并通过深复制这个原型来创建新的对象。使用 Prototype 模式可以在运行时增加或减少原型。
  • Singleton 模式: 可以保证一个类仅有一个实例,从而可以提供一个单一的全局访问点。
    在这里插入图片描述

随着开发系统的不断扩张,系统功能更加丰富,模块之间的复用越来越多,系统中类与对象的结构变得更加复杂。如果缺乏良好的设计,这些类之间的关系将会变得非常混乱。结构型设计模式就是为了解决这些问题的。

  • Adapter 模式: 解决系统间接口不相容的问题。通过 Adapter 可以把类的接口转化为客户程序所希望的接口,从而提高复用性。
  • Bridge 模式: 把类的抽象部分同实现部分相分离,这样类的抽象和实现都可以独立地变化。
  • Composite 模式: 提供了一种以树形结构组合对象的方法,可以使单个对象和组合后的对象具有一致性以提高软件的复用性。
  • Decorator 模式: 可以动态地为对象的某一个方法增加更多的功能。
  • Facade 模式: 为一组类提供了一致的访问接口。使用 Facade 可以封装内部具有不同接口的类,使其对外提供统一的访问方式
  • Flyweight 模式: 可以共享大量的细粒度对象,从而节省创建对象所需要分配的空间,不过在时间上的开销会变大。
  • Proxy 模式: 为对象提供了一种访问代理,通过对象 Proxy可以控制客户程序的访问。
    在这里插入图片描述

行为型模式:这些设计模式特别关注对象之间的通信。

  • Interpreter 模式: 定义了一个解释器,来解释遵循给定语言和文法的句子。
  • Template Method 模式: 定义一个操作的模板,其中的一些步骤会在子类中实现,以适应不同的情况。
  • Chain of Responsibility 模式: 把可以响应请求的对象组织成一条链,并在这条对象链上传递请求,从而保证多个对象都有机会处理请求而且可以避免请求方和相应方的耦合。
  • Command 模式: 将请求封装为对象,从而增强请求的能力,如参数化、排队、记录日志等。
  • Iterator 模式: 提供了顺序访问一个对象集合中的各元素的方法,使用 Iterator 可以避免暴露集合中对象的耦合关系。
  • Mediator 模式: 可以减少系统中对象间的耦合性。使用中介对象封装其他的对象,从而使这些被封装的对象间的关系就成了松散耦合。
  • Memento 模式: 提供了一种捕获对象状态的方法,且不会破坏对象的封装。并且可以在对象外部保存对象的状态,并在需要的时候恢复对象状态。
  • Observer 模式: 提供了将对象的状态广播到一组观察者的方式,从而可以让每个观察者随时可以得到对象更新的通知。
  • State 模式: 允许一个对象在其内部状态改变的时候改变它的行为。
  • Strategy 模式: 使用 Strategy 模式可以让对象中算法的变化独立于客户。
  • Visitor 模式: 表示对某对象结构中各元素的操作,使用 Visitor 模式可以在不改变各元素类的前提下定义作用于这些元素的新操作。
    在这里插入图片描述
    在这里插入图片描述

设计模式与软件架构

软件架构描述了软件的组成,例如,经典的“4+1”视图,将软件架构通过逻辑视图、开发视图、进程视图、物理视图及场景视图来进行描述。在这些视图中,描述了软件系统中类之间的关系、进程之间的关系、软件和硬件的结合等问题。一般来说,软件架构更倾向于从整体和全局上描述软件的组成。

设计模式则更侧重于类与类、对象与对象之间的关系。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值