首页 > 其他分享 >00.设计模式总览

00.设计模式总览

时间:2022-11-27 21:14:39浏览次数:65  
标签:00 设计模式 原则 对象 接口 依赖 模式 总览

参考:https://baijiahao.baidu.com/s?id=1661505290125455712&wfr=spider&for=pc 

概述:

设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。设计模式是高层次的方案,与具体实现细节无关(如算法,数据结构,网页等)。设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式可以提高代码的可重用性和可读性增强系统的可靠性和可维护性,解决一系列的复杂问题,提高协作效率。

一:设计模式分类

总体来说23种设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

创建型模式提供实例化的方法,为适合的状况提供相应的对象创建方法。社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。

因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。

结构型模式:这些设计模式关注类和对象的组合继承的概念被用来组合接口和定义组合对象获得新功能的方式。因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。

行为型模式:这些设计模式特别关注对象之间的通信。用于在不同的实体间进行通信,为实体之间的通信提供更容易,更灵活的通信方法

二:设计模式的六大原则

1、单一原则(Single Responsibility Principle)

一个类只负责一项职责,尽量做到类只有一个行为原因引起变化;

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱他的设计,当变化发生时,设计会遭受到意想不到的破坏;软件设计真正要做的许多内容就是发现职责并把那些职责相互分离。

2.里氏替换原则(LSP liskov substitution principle)

子类可以扩展父类的功能,但不能改变原有父类的功能;

目的:增强程序的健壮性。实际项目中,每个子类对应不同的业务含义,使父类作为参数,传递不同的子类完成不同的业务逻辑。

3.依赖倒置原则(dependence inversion principle)

面向接口编程;(通过接口作为参数实现应用场景)

依赖于抽象而不依赖于具体。

抽象就是接口或者抽象类,细节就是实现类

依赖倒置原则定义:

上层模块不应该依赖下层模块,两者应依赖其抽象,抽象不应该依赖细节细节应该依赖抽象接口负责定义public属性和方法,并且申明与其他对象依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑。

4.接口隔离(interface segregation principle)

建立单一接口;(扩展为类也是一种接口,一切皆接口)。

使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度。

降低依赖,降低耦合。

定义:

客户端不应该依赖它不需要的接口;类之间依赖关系应该建立在最小的接口上;

5.迪米特原则(law of demeter LOD)

最少知道原则,尽量降低类与类之间的耦合;

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

6.开闭原则(open closed principle)

用抽象构建架构,用实现扩展原则;

开闭原则就是说对扩展开放,对修改关闭。

一个软件实体通过扩展来实现变化,而不是通过修改原来的代码来实现变化。实现一个热插拔的效果。

开闭原则是对软件实体的未来事件而制定的对现行开发设计进行约束的一个原则。

                           

 

标签:00,设计模式,原则,对象,接口,依赖,模式,总览
From: https://www.cnblogs.com/q994321263/p/16930649.html

相关文章

  • 003爬虫之数据解析概述-正则表达式
    当我们爬到了网页的源代码之后,我们就需要对指定的数据进行获取,比如上一篇中只获取电影名称和上映时间,这里我们需要对获取的数据进行解析,以下提供四种解析方式:1.re解析2.b......
  • 设计模式-工厂模式
    工厂模式定义工厂模式定义:这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式、在工厂模式中,我们在创建对对象时不会对客户端暴露创建逻辑,并且是通过使用......
  • jquery009-js执行的先后顺序
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><bodystyle="width:980px;margin:0auto"><h1>#一,当页面框架......
  • 1000-2000年之间的闰年
    intmain(){ inti; intcount=0; for(i=1000;i<=2000;i++) { if(i%4==0&&i%100!=0) { printf("1000-2000年之间的闰年:%d\n",i); count++; } el......
  • rac dg活动复制完成后,备库节点1查询数据库状态时报错ORA-00204、ORA-00202,且告警日志
    问题描述:racdg活动复制完成后,备库节点1查询数据库状态时报错ORA-00204、ORA-00202,且告警日志中出现ORA-15025、ORA-27041异常,如下所示:说明:racdg磁盘组采用的是多路径+ud......
  • 100019 求三角形斜边对边已知角A邻边角度
    <?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='求三角形斜边对......
  • vs2008 调试js
    面对一大段的JavaScript脚本,以前总是会很头疼,找不到调试这些代码的方法。如果出现什么错误或异常,总是要从头分析,然后插入很多Alert(),调试起来很麻烦。VisualStudio2008中J......
  • #MyBatis和MyBatis Plus学习之旅(200-11-27)
    Mybatis和MybatisPlus的jar包/maven文件Mybatis的jar包/maven文件1、jar包: ​​mybatis-x.x.x.jar​​ 2、maven文件:<!--spring的maven文件--><!--mybatis包--><dependen......
  • jquery008-表单验证
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>form</title><style>.error{color:red;}.hide{......
  • Java设计模式之 单例模式实验报告书
    目录Java​​​设计模式​​​之1​​​单例模式​​​实验报告书1*实验四:单例模式2一、实验目的2二、实验内容3三、实验步骤3Appconfige.java4Client.java43......