乐趣区

关于设计模式:设计模式概述

成为一名优良的软件开发工程师,设计模式的重要性显而易见,本章节是对设计模式的前置常识概述,波及概念性较大,读者可在设计模式学习过程中参阅本文档。

在第一章节,次要介绍软件设计的七大准则,接着在第二章咱们简要介绍设计模式的三种分类,让咱们站在肯定的高度对设计模式有整体的把握,第三章 UML 类图帮忙咱们更好的看懂设计模式的代码。

一、软件设计七大准则

无论是在咱们学习设计模式的过程中,还是日常的开发过程中,都要遵循一套对立的软件设计准则。

在常见的设计准则中,一共是 7 种设计准则,它们别离为开闭准则、里氏替换准则、依赖倒置准则、繁多职责准则、接口隔离准则、迪米特法令和合成复用准则。

各种各样的准则最终目标只有一句话,也是软件开发人员听过的最多的一句话:高内聚、低耦合,进步复用性、可扩展性、可维护性。

设计准则 一句话演绎 目标
开闭准则 对扩大凋谢,对批改敞开 升高保护带来的新危险
依赖倒置准则 高层不应该依赖低层,要面向接口编程 更利于代码构造的降级扩大
繁多职责准则 一个类只干一件事,实现类要繁多 便于了解,进步代码的可读性
接口隔离准则 一个接口只干一件事,接口要精简繁多 性能解耦,高聚合、低耦合
迪米特法令 不该晓得的不要晓得,一个类应该放弃对其它对象起码的理解,升高耦合度 只和敌人交换,不和陌生人谈话,缩小代码臃肿
里氏替换准则 不要毁坏继承体系,子类重写办法性能产生扭转,不应该影响父类办法的含意 避免继承泛滥
合成复用准则 尽量应用组合或者聚合关系实现代码复用,少应用继承 升高代码耦合

这些准则在咱们开发过程中或多或少的都有体现,比方在咱们的我的项目中业务层总是定义 Service 接口,在 Impl 中实现具体的逻辑,很多开发只是照葫芦画瓢,却并不知道为什么要这样做,联合开发准则读者能够认真想一下为什么要这样做。

还有一个典型的用法,咱们定义的实体类的成员变量,总是用 private 润饰,而后定义 get 和 set 办法去操作这些成员变量,那为什么不间接把成员变量定义 public,间接操作成员变量呢。

软件设计准则在咱们的开发中处处体现,在一些代码习惯上多思考,做到知其然知其所以然。

二、设计模式分类

在设计模式学习过程中能够查阅该文档,学习每个设计模式时,对于他的作用和分类能做到成竹在胸。

1、创立型

创立型模式的次要关注点是“怎么创建对象?”,它的次要特点是“将对象的创立与应用拆散”。

  • 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局拜访点供内部获取该实例,其拓展是无限多例模式。
  • 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型相似的新实例。
  • 工厂办法(FactoryMethod)模式:定义一个用于创立产品的接口,由子类决定生产什么产品。
  • 形象工厂(AbstractFactory)模式:提供一个创立产品族的接口,其每个子类能够生产一系列相干的产品。
  • 建造者(Builder)模式:将一个简单对象分解成多个绝对简略的局部,而后依据不同须要别离创立它们,最初构建成该简单对象。

2、结构型

结构型模式形容如何将类或对象按某种布局组成更大的构造。它分为类结构型模式和对象结构型模式,前者采纳继承机制来组织接口和类,后者釆用组合或聚合来组合对象。

  1. 代理(Proxy)模式:为某对象提供一种代理以管制对该对象的拜访。即客户端通过代理间接地拜访该对象,从而限度、加强或批改该对象的一些个性。
  2. 适配器(Adapter)模式:将一个类的接口转换成客户心愿的另外一个接口,使得本来因为接口不兼容而不能一起工作的那些类能一起工作。
  3. 桥接(Bridge)模式:将形象与实现拆散,使它们能够独立变动。它是用组合关系代替继承关系来实现的,从而升高了形象和实现这两个可变维度的耦合度。
  4. 装璜(Decorator)模式:动静地给对象减少一些职责,即减少其额定的性能。
  5. 外观(Facade)模式:为多个简单的子系统提供一个统一的接口,使这些子系统更加容易被拜访。
  6. 享元(Flyweight)模式:使用共享技术来无效地反对大量细粒度对象的复用。
  7. 组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具备统一的拜访性。

3、行为型

行为型模式用于形容程序在运行时简单的流程管制,即形容多个类或对象之间怎么相互协作共同完成单个对象都无奈独自实现的工作,它波及算法与对象间职责的调配。

行为型模式分为类行为模式和对象行为模式,前者采纳继承机制来在类间分派行为,后者采纳组合或聚合在对象间调配行为。因为组合关系或聚合关系比继承关系耦合度低,满足“合成复用准则”,所以对象行为模式比类行为模式具备更大的灵活性。

  1. 模板办法(Template Method)模式:定义一个操作中的算法骨架,将算法的一些步骤提早到子类中,使得子类在能够不扭转该算法构造的状况下重定义该算法的某些特定步骤。
  2. 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们能够互相替换,且算法的扭转不会影响应用算法的客户。
  3. 命令(Command)模式:将一个申请封装为一个对象,使发出请求的责任和执行申请的责任宰割开。
  4. 职责链(Chain of Responsibility)模式:把申请从链中的一个对象传到下一个对象,直到申请被响应为止。通过这种形式去除对象之间的耦合。
  5. 状态(State)模式:容许一个对象在其外部状态产生扭转时扭转其行为能力。
  6. 观察者(Observer)模式:多个对象间存在一对多关系,当一个对象产生扭转时,把这种扭转告诉给其余多个对象,从而影响其余对象的行为。
  7. 中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,升高零碎中对象间的耦合度,使原有对象之间不用相互了解。
  8. 迭代器(Iterator)模式:提供一种办法来程序拜访聚合对象中的一系列数据,而不裸露聚合对象的外部示意。
  9. 访问者(Visitor)模式:在不扭转汇合元素的前提下,为一个汇合中的每个元素提供多种拜访形式,即每个元素有多个访问者对象拜访。
  10. 备忘录(Memento)模式:在不毁坏封装性的前提下,获取并保留一个对象的外部状态,以便当前复原它。
  11. 解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释办法,即解释器。

三、UML 详解

UML 类图摘抄自卑话设计模式,我目前见过最好的一张图,便于读者了解。

在面向对象的世界中,蕴含了对象和接口,UML 类图次要是能表达出来对象和接口的体现和他们的关系。

对象和接口都是采纳矩形框示意,因为对象蕴含类名、成员变量、成员办法所以用三层来示意,接口没有成员变量,所以采纳两层来示意,为了更易于辨别在接口名上《interface》,另外,抽象类用斜体示意。成员变量均有关键词润饰,+ 代表 public、- 代表 private、# 代表 protected

接下来阐明类与类、接口与类之间关系的表白。

继承,空心三角形 + 实线

实现接口,空心三角形 + 虚线

关联,实线。企鹅和气象。

聚合,菱形 + 实现箭头。雁群和大雁。

依赖,虚线箭头。动物依赖水和氧气能力生存。

从本章节开始就正式迈入了面向对象的世界,从增删改查的码农,到真正将编程成为一门艺术。

退出移动版