zoukankan      html  css  js  c++  java
  • 【设计模式】设计模式概述

    设计模式概述

    软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。

    由来

    软件设计模式源自于建筑学。Christopher Alexander在著作《A Pattern Language: Towns, Buildings, Construction》中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从Context(前提条件)ThemeProblem(目标问题)Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。

    设计模式一般包含模式名称、问题、目的、解决方案以及效果等要素。

    • 模式名称(Pattern Name):通过一两个词来描述模式的问题,解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的。
    • 问题(Problem):描述应该在何时使用模式,包含了设计中存在的问题以及问题存在的原因。
    • 解决方案(Solution):描述一个设计模式的组成成分,以及这些组成成分之间的相互关系、各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述。
    • 效果(Consequences):描述了模式的优缺点以及在使用模式时应该权衡的问题。

    作用

    设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

    分类

    狭义的设计模式一般分为三大类共计23种,但是随着技术的发展也一直在补充扩展。

    类型 含义 种类
    创建型模式 关注对象的创建过程 单例模式、简单工厂模式、抽象工厂模式、工厂方法模式、原型模式、建造者模式
    结构型模式 关注如何将现有类或对象组织在一起形成更加强大的结构 适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式
    行为者模式 关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责 职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式

    关系

    与软件框架的关系

    软件框架伴随着软件工程的发展而出现,所谓的软件框架,是提取了特定领域的软件的共性部分所形成的软件体系,它并不是一个成熟的软件,更像是一个半成品。开发者在框架之上,可以进行既可靠又快速的二次开发。

    设计模式和软件框架在软件设计中是两个不同的领域:

    • 设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案,它可被应用于不同的框架和被不同的语言所实现。但是软件框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体。
    • 设计模式相较于软件框架更容易移植,并且可以用多种语言实现。但是软件框架则受限于领域大环境。虽然如此,但是它们都重视软件复用提高开发效率

    与软件架构的关系

    软件架构是一个宏观的概念,它主要考虑软件的整体结构、层次划分以及不同部分之间的协作和交互等,它着眼于整体。

    总体来说,软件架构可以由不同的框架和不同的设计模式,再加上特定的构件组合来实现框架可以根据设计模式结合特定编程语言和环境来实现设计模式就是解决单一问题的设计思路和解决方法

    优点

    • 设计模式融合了众多专家的经验,以一种标准的形式供广大开发人员使用,通俗的设计词* 汇和通用的语言方便开发人员交流和学习。
    • 设计模式使人们可以更简单方便地复用成功的设计,使新开发者更容易理解设计思路。
    • 设计模式使设计方案更加灵活、易于修改。
    • 设计模式的使用将提高软件系统的开发效率和软件质量,节约开发成本。
    • 设计模式有助于初学者深入理解面向对象思想。
  • 相关阅读:
    sdnu 1513 字符串翻转
    hdu-1559 最大子矩阵(二维树状数组模板题)
    hdu-1556 树状数组
    1049.饭盒
    1092.校门外的树
    1012.区间合并
    1054.数独
    1175.开心的金明 01背包
    空格(Space)的ASCII码值是:32
    js为lable和div赋值
  • 原文地址:https://www.cnblogs.com/parzulpan/p/13496942.html
Copyright © 2011-2022 走看看