设计模式-前言

275 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、介绍

本文为设计模式专栏的第一篇文章,内容分为三大块:设计模式概述、程序开发的七大原则和UML的简单介绍。本专栏的内容是站在巨人的肩膀上完成的,万分感谢以下博主、站长及作者的知识分享:

二、设计模式概述

1. 概念

设计模式在我看来就是从前辈们大量实践、设计的经验中总结而来的解决某些重复出现的问题的一系列章法。设计模式的本质是为了使设计更加简单,切记不要为了使用设计模式而过度设计,不要把简单问题复杂化。死记硬背、生搬硬套不是目的,活学活用、实践积累才是学习设计模式的最终目的。

2. 基本要素

设计模式一般包含以下基本元素:名字、别名、问题、解决方案、效果、例子、相关模式、已知应用等 其中最主要的有包含以下四种:

  • 名字:模式的名字,方便理解、交流。
  • 问题:描述了该模式的应用场景。
  • 解决方案:包括静态的结构即模式的组成和动态的行为即模式各部分的协作方式。
  • 效果:描述了该模式的优缺点。

3. 总览

设计模式有两种分类方式:根据模式的目的进行分类和根据模式的作用范围进行分类。

  • 按照目的分类
    • 创建型模式:描述了如何创建对象
    • 结构型模式:描述了多个类或对象如何组成另一种结构
    • 行为型模式: 描述了多个类或对象如何协作完成任务
  • 按照作用范围分类
    • 类模式:处理类之间的关系
    • 对象模式:处理对象之间的关系 具体分类参照下表格: | 目的\范围 | 类模式 | 对象模式 | | --- | --- | --- | | 创建型模式 | 工厂方法模式 | 单例模式、原型模式、抽象工厂模式、建造者模式 | | 结构型模式 | 类适配器模式 | 对象适配器模式、代理模式、桥接模式、装饰模式、外观模式、享元模式、组合模式 | | 行为型模式 | 模板方法模式、解释器模式 | 策略模式、命令模式、责任链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式 |

注:类适配器模式和对象适配器模式都是适配器模式,两者只是适配器模式的两种不同表现形式

三、程序开发的七大原则

程序开发的七大原则根本目的都是为了提高程序的可复用性、可维护性。 本文只是简单介绍这七大原则,想要深入了解的朋友可以去查阅相关资料。七大原则简单介绍参照下表格:

原则名目的总结
开闭原则降低系统维护可能引发的新问题对扩展开放,对修改闭合
里氏替换原则规范父子类继承关系子类可以扩展父类的功能,但不能改变父类原有的功能
依赖倒置原则利于代码的扩展基于接口编程而不是基于实现编程
单一职责原则提高类的可读性、降低类的复杂度一个类尽量只负责一件事
接口隔离原则降低类对接口的依赖、降低系统耦合度合理设计接口粒度尽量小
迪米特法则降低类之间耦合度只与“朋友”交流,不与“陌生人”交流
合成复用原则降低代码耦合少用继承,尽量使用组合或聚合关系

四、UML简单介绍

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。 本文简单介绍下UML常用的知识点便于后续文章的理解,如果感兴趣的朋友可以去查阅专业文献。 UML由图、事物和关系三块构件组成,详细分类如下所示:

    • 结构图
      • 静态图
        • 类图
        • 对象图
        • 包图
      • 实现图
        • 构件图
        • 部署图
      • 组合结构图
    • 行为图
      • 活动图
      • 状态图
      • 用例图
    • 交互图
      • 时间图
      • 交互概览图
      • 协作图
  • 事物
    • 结构事物
      • Class.png
      • 接口interface.png
      • 用例UserCase.png
      • 协作Collaboration.png
      • 组件Component.png
      • 活动类ActiveClass.png
      • 节点Node.png
    • 行为事物
      • 交互Message.png
      • 状态 State.png
    • 分组事物
      • Package.png
    • 注释事物
      • 注释Note.png
  • 关系
    • 关联Association.png
    • 聚合Aggregation.png
    • 组合Composition.png
    • 泛化Generalization.png
    • 实现Realization.png
    • 依赖Dependency.png