ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SOLID原则与正则表达式

2022-06-13 00:03:40  阅读:172  来源: 互联网

标签:AB 职责 原则 SOLID 接口 正则表达式 SRP


  • SOLID

SOLID设计原则是由罗伯特·C·马丁引入面向对象编程和面向对象设计中五个基本原则首字母缩写,它们分别是:

(SRP)Single-responsibility principle 单一职责原则
(OCP)Open–closed principle 开闭原则
(LSP)Liskov substitution principle Liskov替换原则
(ISP)Interface Segregation Principle 接口隔离原则
(DIP)Dependency inversion principle 依赖倒置原则

 

1.SRP:单一责任原则
ADT中发生变化的原因(责任)只能有一个,否则应该拆分开。
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中,即又定义有且仅有一个原因使类变更。(甲类负责两个不同的职责:职责A,职责B。当由于职责A需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责B功能发生故障。也就是说职责A和B被耦合在了一起)。

 

2.OCP:开放-封闭原则
对扩展性的开放
对修改的封闭
即可扩展(extension),不可修改(modification)。
关键的解决方案:抽象技术(继承,组合,委托)

OCP的反例:

                                           

 

 

 

3.LSP:Liskov替换原则
子类型必须能替换基类型
派生类必须能够通过其基类的接口使用,客户端无需了解二者之间差异
经典的例子: 正方形不是长方形的子类。因为正方形多了一个长宽相等的属性。如果长方形的长与宽是可变的,而此时却用正方形代替了长方形,因为正方形时刻要求长宽相同,所以长宽会同时发生变化,而与我们预期不符,违反了LisKov原则。因此二者没有子类父类的关系。

 

4.ISP:接口隔离原则
不强迫客户端依赖于不需要的接口,避免接口污染和胖接口。通俗来说,就是客户需要什么功能,就实现什么接口即可,不要实现无用的接口。

与SRP的联系
要想实现ISP原则,需要先满足SRP原则,将各个接口的责任变得单一,这样才能使类与类(接口)之间的依赖是最小的,这样既可以使用户无需依赖不需要的方法,又可以降低各个用户之间的影响,当用户提出新的要求时,接口的改变对原来用户的影响达到最小。当满足SRP原则时,每个接口的责任变得单一化,才能够更好的实现接口隔离(ISP)。

5.DIP:依赖转置原则
高层模块不应该依赖于低层模块,二者都应该依赖于抽象
抽象不应该依赖于实现细节,实现细节应该依赖于抽象
示例如下

                            

 

 

  • 正则表达式

 

  正则表达式基于集合中每个字符串共享的公共特征来描述一组字符串,可以用于查找、编辑、文本或数据处理,这个和java中的通常的语法不一样。正则表达式的复杂度各不相同,理解了如何构建这些正则表达式,就可以破译或者构建任何正则表达式。

  构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

 

计算操作在形式语言学习过

1.连接操作:如AB,就是A和B连接,就指定了一种语言{AB},它含有一个由两个字符组成的字符串AB

2.或操作:可指定多种可能的匹配,用“|”表示这个操作,例如 A|B 就指定了一个语言{A,B}。连接操作优先级高于或,所以AB|CDE指定的是{AB,CDE}。

3.闭包操作:可以将模式的部分重复任意多次,包括0次,用“*”标记在被重复的模式之后。闭包优先级高于连接,故AB*表示的是一个A和任意多个B组成的字符串,如A,AB,ABBB…

4.括号,同普通运算,括号可以改变优先级

示例:
C(AC|B)D ——————{CACD,CBD}
(A|C)((B|C)D)——————{ABD,ACD,CCD,CBD}
(AB)*——————{空,AB,ABAB,ABABAB…}

特殊含义的操作符:

                 

 

标签:AB,职责,原则,SOLID,接口,正则表达式,SRP
来源: https://www.cnblogs.com/birdy-/p/16369306.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有