`

什么是「设计模式」?

阅读更多

文章目录

  1. 前言

  2. 什么是设计模式?

  3. 设计模式之六大原则

  4. 高内聚,低耦合?

     

1

前言

很多人应该听说过设计模式(Design pattern),又或多或少的看过或用过设计模式,但是实际用在开发过程中总有点心有余而力不足的感觉。那肯定是对设计模式的理解有少许偏差或者不够深入。先不谈某种具体的模式,先来看看什么是设计模式?

 

从概论结合实际场景分析

 

2

什么是设计模式?

设计模式是一套代码设计「经验的总结」。项目中「合理的」运用设计模式可以「巧妙的解决很多问题」。

 

经验的总结:抱着「代码虐我千百遍,我待代码如初恋」的心态,最终得出来的「套路」。

 

合理的:要对设计模式的使用场景有一定的认识后才使用,「不要滥用」。如:输出一句“hello world”,非要强行给加上各种模式。
问:“为什么”,答:“总感觉少了模式!”。

 

巧妙的解决了很多问题:被广泛应用的原因。

 

为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?

 

3

设计模式之六大原则

开闭原则(Open Close Principle)

1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造(Object Oriented Software Construction)》中提出了开闭原则,它的原文是这样:“Software entities should be open for extension,but closed for modification”。

软件模块应该对扩展开放,对修改关闭。

 

举例:在程序需要进行新增功能的时候,不能去修改原有的代码,而是新增代码,实现一个热插拔的效果(热插拔:灵活的去除或添加功能,不影响到原有的功能)。

 

目的:为了使程序的扩展性好,易于维护和升级。

 

里氏代换原则(Liskov Substitution Principle)

里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

 

举例:球类,原本是一种体育用品,它的衍生类有篮球、足球、排球、羽毛球等等,如果衍生类替换了基类的原本方法,如把体育用品改成了食用品(那么软件单位的功能受到影响),就不符合里氏代换原则。

 

目的:对实现抽象化的具体步骤的规范。

 

依赖倒转原则(Dependence Inversion Principle)

针对接口编程,而不是针对实现编程。

 

举例:以计算机系统为例,无论主板、CPU、内存、硬件都是在针对接口设计的,如果针对实现来设计,内存就要对应到针对某个品牌的主板,那么会出现换内存需要把主板也换掉的尴尬。

 

目的:降低模块间的耦合。

 

接口隔离原则(Interface Segregation Principle)

使用多个隔离的接口,比使用单个接口要好。

 

举例:比如:登录,注册时属于用户模块的两个接口,比写成一个接口好。

 

目的:提高程序设计灵活性。

 

迪米特法则(最少知道原则)(Demeter Principle)

1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一[Booch]等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。

 

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

 

举例:一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。

 

目的:降低类之间的耦合,减少对其他类的依赖。

 

单一职责原则( Single responsibility principle )

该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。

 

一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

 

举例:该原则意思简单到不需要举例!

 

目的:类的复杂性降低,可读性提高,可维护性提高。

 

 

刚入行的时候,在想什么样的代码是好代码?看到很多前辈的文字都说好的代码要符合「高内聚,低耦合」,但是我听到这样的解释,是这样的

而现在对设计模式有了一定程度上的学习,感觉懂了一些,小伙伴们你们学会了吗?

 

4

高内聚,低耦合?

内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;

 

耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

 

分享到:
评论

相关推荐

    1.什么是设计模式? 2.设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案 3.说出

    1.什么是设计模式? 2.设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。 3.说出你所知道的设计模式? 4.简单工厂,外观模式,适配器模式,单例模式,工厂方法模式,...

    (入门)什么是AOP?什么是代理模式?怎么设计日志拦截器?

    NULL 博文链接:https://moshow.iteye.com/blog/1608726

    后端-设计模式-java-精讲

    什么是设计模式? 有哪些类型的设计模式? 工厂方法模式的定义是什么? 《设计模式精讲》适用于各个层次的软件开发人员,从初学者到资深工程师都可以受益。具体来说,以下人群会特别受益: 1. **初学者**:对...

    美团Java 岗 154 道面试题.zip

    98.什么是设计模式?你是否在你的代码里面使用过任何设计模式? 99.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式 100.在 Java 中,什么叫观察者设计模式(observer design pattern)? 101.使用...

    说说设计模式那些事 什么是模式? 什么是框架?

    什么是模式? 模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。 Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后...

    软件设计模式

    软件设计模式,习题集。什么是设计模式?设计模式的目标是什么?.抽象工厂模式( Abstract Factory ) .工厂方法模式(Factory Method) .适配器模式 (Adapter) .单例模式(Singleton

    设计模式(中文版)

    什么是设计模式? Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”[ A I S + 7 7,第1 0...

    设计模式(中文版).part3.rar

    什么是设计模式? Christopher Alexander 说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”[ A I S + 7 7,第1 0...

    MVC设计模式例子程序

    我对照网上一篇讲述MVC设计模式的文章,用VS2008的C#语言写的MVC设计模式例子程序。

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    C_设计模式(23种设计模式)

    C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...

    详细设计要求-编码规范与设计模式1

    介绍编码的基本规范排版注释标识符命名可读性变量、结构函数、过程内容安排关于设计模式的应用什么是设计模式?么是设计模式每一个设计模式描述一个在我们周围不断重复发生

    无废话 C#设计模式.pdf

    么是设计模式? 什么是少林拳呢?少林拳是少林僧人经过长期的总结,得出的一套武功套路。有一本叫做少林 拳法的武功秘籍,上面记载这这套拳法的适用人群,打法套路和学成后的效果。设计模式虽然记录在 了设计模式一...

    设计模式精解 设计模式精解

    设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式 设计模式精解设计模式精解设计模式精解...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    写完了Interpreter模式之后,我习惯性的看看下一天的安排,却陡然发现GoF的23个设计模式的解析已经在我不经意间写完了。就像在一年前看GoF的《设计模式》一书,和半年前用C++模拟、实现23种经典的设计模式一般,透过...

    ActionScript 3.0设计模式扫描版_方红琴译

    什么是工厂方法模式? ActionScript 3.0中的抽象类 工厂方法最小化示例 隐藏产品类 .实例:打印商店管理程序 实例扩展:彩色打印 工厂方法模式中关键的00P概念 实例:Sprite工厂 实例:垂直射击游戏 小结 ...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之...

    C++ Qt设计模式

    设计模式与QT 1、C++简介 2、类与对象 3、Qt简介 4、列表 5、函数 6、继承与多态 7、库与设计模式 8、QObject、QApplication,信号与槽 9、窗件和设计师 10、主窗口和动作 11、范型和容器 12、元对象,属性,和反射...

Global site tag (gtag.js) - Google Analytics