美文网首页产品
细谈设计模式

细谈设计模式

作者: 越前君 | 来源:发表于2022-07-16 15:20 被阅读0次
配图源自 Freepik

终于有时间写这一系列啦...

一、起源

  • 1977 年,建筑师 Christopher Alexander 编写了一本汇集设计模式的书,模式(Pattern)一词源自此书。
  • 1987 年,Kent Beck 和 Ward Cunningham 利用 Christopher Alexander 的思想开发了设计模式(Design Pattern),并首次应用于计算机领域。
  • 1989 年,Erich Gamma 在其博士毕业论文中将这种思想改写为适用于软件开发。
  • 1989 ~ 1991 年期间,James Coplien 利用相同的思想致力于 C++ 开发。
  • 1994 年,被称为四人帮(Gang of Four,GoF)的 Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 于 1994 年合作出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书,此书共收录了 23 种设计模式。

更多请看维基百科

二、简介

设计模式用于解决软件「设计」层面的问题,而非具体的编码实现。

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

三、设计原则

设计模式并不是语言规范,解决实际问题时并没有规范必须使用哪一种设计模式,不宜生搬硬套,应灵活运用。最重要的是,一定不要为了用设计模式而用设计模式,避免设计过度,使得简单问题复杂化。因此,在用之前应思考问题本身是否需要设计模式。

通常应遵循七大设计原则:

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

  • 里氏替换原则(Liskov Substitution Principle,LSP)
    子类可以扩展父类的功能,但不能改变父类原有的功能。

  • 依赖倒置原则(Dependence Inversion Principle,DIP)
    高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。

  • 单一职责原则(Single Responsibility Principle,SRP)
    其核心是控制类的粒度大小、将对象解耦、提高其内聚性。

  • 接口隔离原则(Interface Segregation Principle,ISP)
    为了约束接口、降低类对接口的依赖性。

  • 迪米特法则(Law of Demeter,LoD)
    如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

  • 合成复用原则(Composite Reuse Principle,CRP)
    通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

根据侧重点总结归纳:

设计原则 一句话归纳 目的
开闭原则 对扩展开放,对修改关闭 降低维护带来的新风险
依赖倒置原则 高层不应该依赖低层,要面向接口编程 更利于代码结构的升级扩展
单一职责原则 一个类只干一件事,实现类要单一 便于理解,提高代码的可读性
接口隔离原则 一个接口只干一件事,接口要精简单一 功能解耦,高聚合、低耦合
迪米特法则 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 只和朋友交流,不和陌生人说话,减少代码臃肿
里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 防止继承泛滥
合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 降低代码耦合

以上这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。

访问加限制,函数要节俭,依赖不允许,动态加接口,父类要抽象,扩展不更改。

四、分类

一个软件设计模式的格式根据作者的不同,划分和名称等都会有所不同。《Design Patterns》一书将设计模式分为三大类:创建型模式、结构型模式和行为型模式,共 23 种。

  • 创建型模式
    • 工厂方法模式
    • 抽象工厂模式
    • 建造者模式
    • 原型模式
    • 单例模式
  • 结构型模式
    • 适配器
    • 桥接
    • 组合
    • 装饰器
    • 外观
    • 享元
    • 代理
  • 行为型模式
    • 责任链
    • 命令
    • 解释器
    • 迭代器
    • 中介
    • 备忘录
    • 观察者
    • 状态
    • 策略
    • 模板方法
    • 访问者

注意,设计模式并不是某一门编程语言的专利,它适用于 Java、C++、C#、JavaScript 等面向对象的编程语言。下文将会以 JavaScript 为例。

五、创建型模式

5.1 工厂方法模式(Factory Method Pattern)

定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。

未完待续...

相关文章

  • 细谈设计模式

    终于有时间写这一系列啦... 一、起源 1977 年,建筑师 Christopher Alexander 编写了一...

  • 设计模式

    1.重构传统设计模式 2.消灭重复代码之策略模式-短信模板业务场景 3.细谈八种架构'设计模式'及其优缺点概述 4...

  • Timeline细谈--事件模式

    Timeline可以解决:你的程序为什么很缓慢 其中标注数字分别表示:1:获取样本的调用栈;2:获取每次时间线事件...

  • 细谈8种架构设计模式及其优缺点

    一、什么是架构 我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果,哈哈,我理解,架构就是骨...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

网友评论

    本文标题:细谈设计模式

    本文链接:https://www.haomeiwen.com/subject/rsforrtx.html