软件工程中的常用设计模式有哪些?

软件工程 设计模式
2023-05-24 10:49:20 发布

在软件开发中,设计模式是解决一类问题的经验总结,是解决软件设计中常见问题的可重复利用的方案。设计模式是面向对象程序设计中的一个重要内容,它是对软件设计经验的总结,是对软件开发中反复出现的问题的解决方案。设计模式不是一种具体的技术,而是一种思想,是一种对软件设计中某类特定问题的解决方案的提炼。

常用的设计模式包括:创建型模式、结构型模式和行为型模式。

一、创建型模式

  1. 工厂模式(Factory Pattern)

工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象而不是直接通过 new 运算符实例化对象。

  1. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

  1. 单例模式(Singleton Pattern)

单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个访问它的全局访问点。

  1. 建造者模式(Builder Pattern)

建造者模式是一种创建型模式,它通过一步步地构造复杂对象而使其具备不同的属性。与工厂模式不同的是,建造者模式更加注重于对象创建的过程,而不仅仅是创建出一个对象。

  1. 原型模式(Prototype Pattern)

原型模式是一种创建型模式,它允许通过复制现有对象来创建新对象,而不是通过实例化来创建。

二、结构型模式

  1. 适配器模式(Adapter Pattern)

适配器模式是一种结构型模式,它允许将不兼容的对象包装在一个适配器中,以便它们可以协同工作。

  1. 桥接模式(Bridge Pattern)

桥接模式是一种结构型模式,它将一个抽象与它的实现分离,从而使它们可以独立地变化。

  1. 组合模式(Composite Pattern)

组合模式是一种结构型模式,它允许将对象组合成树形结构,并且能够像使用独立对象一样使用它们。

  1. 装饰器模式(Decorator Pattern)

装饰器模式是一种结构型模式,它允许动态地将新功能添加到对象中,通过将对象包装在一个装饰器对象中来实现。

  1. 外观模式(Facade Pattern)

外观模式是一种结构型模式,它为一组复杂的子系统提供一个简单的接口。

  1. 享元模式(Flyweight Pattern)

享元模式是一种结构型模式,它通过共享相同的对象来实现对内存的优化。

  1. 代理模式(Proxy Pattern)

代理模式是一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。

三、行为型模式

  1. 责任链模式(Chain of Responsibility Pattern)

责任链模式是一种行为型模式,它允许将请求沿着一个处理链传递,直到有一个对象能够处理请求为止。

  1. 命令模式(Command Pattern)

命令模式是一种行为型模式,它将操作的请求与其接收者解耦,并将它们封装成单独的对象。

  1. 解释器模式(Interpreter Pattern)

解释器模式是一种行为型模式,它定义了一种语言并解释该语言中的表达式。

  1. 迭代器模式(Iterator Pattern)

迭代器模式是一种行为型模式,它允许按照特定顺序访问集合中的元素,而无需暴露集合的底层表示。

  1. 中介者模式(Mediator Pattern)

中介者模式是一种行为型模式,它允许通过一个中介对象来协调其他对象之间的交互。

  1. 备忘录模式(Memento Pattern)

备忘录模式是一种行为型模式,它允许在不破坏封装的情况下捕获和恢复对象的内部状态。

  1. 观察者模式(Observer Pattern)

观察者模式是一种行为型模式,它允许对象之间建立一种一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知。

  1. 状态模式(State Pattern)

状态模式是一种行为型模式,它允许对象在内部状态发生改变时改变它的行为。

  1. 策略模式(Strategy Pattern)

策略模式是一种行为型模式,它允许在运行时选择算法的行为。

  1. 模板方法模式(Template Method Pattern)

模板方法模式是一种行为型模式,它定义了一个算法的骨架,并将一些步骤延迟到子类中实现。

  1. 访问者模式(Visitor Pattern)

访问者模式是一种行为型模式,它允许在不改变对象结构的情况下添加新的操作。

总之,设计模式是软件开发过程中的经验总结,它提供了一些可重复使用的解决方案,可以帮助我们更好地组织和管理代码。在实际开发中,我们可以根据具体情况选择合适的设计模式来解决问题,提高代码的可读性、可维护性和可扩展性。

2023-05-28 07:37:46 更新
其他工具
时间戳工具
时间戳(Unixtimestamp)转换器功能如下:1、时间戳(Unixtimestamp)转换器提供当前时间的时间戳信息,包括以秒为单位的时间戳(10位)和以毫秒为单位的时间戳(13位),只需一键即可复制当前的时间戳信息;2、时间戳(Unixtimestamp)转换器提供时间戳转换北京时间服务,提供时间戳支线转换服务,户只要根据需要输入时间戳信息,就能便捷地将时间戳转换成北京时间;3、时间戳(Unixtimestamp)转换器同时还支持支持北京时间转时间戳服务,只需选择需要的日期信息,就能一键转换成时间戳信息,方便有效!时间戳是什么意思?什么是时间戳我们在工作学习的过程中,经常会需要记录一个准确的时间以防篡改,例如我们在拍摄照片时、或者在进行某些证据保存时需要对时间进行存储,这些场景对时间的准确性、唯一性都要求较高,那么是否有一种日期格式能够满足具备唯一性、准确、易读的特点呢?此时,时间戳就应运而生。简而言之,时间戳就是把格林威治时间1970年01月01日00时00分00秒作为时间基点,然后计算该日期到当前日期的总秒数,从而获得当前日期的时间戳,时间戳是一个长度为10位或者13位的整数。时间戳10位和13位的区别时间戳10位是指时间戳精确到秒,包含10位整数时间戳13位是指时间戳精确到毫秒,包含13位整数两者之间转换时,只需乘以1000或者除以1000即可转换
J
Javascript加密混淆
混淆工具介绍本工具可以混淆加密您的JS代码,让您的JS代码更难理解和被他人抄袭复制,保护您的代码成果,支持es3,es5,es2015,es2016,es2017,es2018,es2019andpartiallyes2020版本的JS。本JS混淆工具完全免费,支持粘贴JS代码或文件上传方式混淆您的代码,没有长度和文件体积限制,默认会带个小尾巴(最前面声明的一个obfucator的变量),当然您可以随意删除,不会影响程序执行。本工具采用开源组件在您的本地客户端浏览器混淆加密您的JS代码,您的JS代码不会上传到网络服务器中处理,完全在您的浏览器完成JS代码的加密混淆,您无需担心代码泄露,安全可信,请放心使用。您的JS代码由开源组件完成混淆,如果您有高频混淆需求,建议使用CLI方式自动化混淆,更加高效便捷。混淆预设方案由于本工具配置项较多,默认提供了3套预设的混淆加密方案,可根据自身情况修改配置,预设方案分别是:1、最佳混淆,性能较差(将会慢50-100%); 2、中等混淆,性能均衡(将会慢30-35%); 3、低度混淆,性能最佳(比未混淆稍慢)。由于混淆过程中会修改程序的执行逻辑以及众多变量替换等操作,会影响原程序的执行性能和增大文件体积,混淆强度和程序性能互斥,最佳混淆会让混淆效果最佳,解密和理解难度最大,但程序执行性能会受到较大影响。最低度的混淆虽然执行性能受影响最小,但混淆强度最低,相对较容易理解混淆后的程序,当然您也可以折中选择中等的混淆强度,该方案相对均衡。您也可以根据实际需要在预设的基础上调整某些配置,值得注意的是,切换预设配置可能会覆盖某些您的自定义设置,请留意配置情况。一般而言,可以无需修改设置直接使用默认的混淆预设方案即可。配置项介绍一、基础设置注意部分设置可能会破坏您的程序逻辑,请混淆后注意检查验证程序逻辑。防止格式化:可以让代码美化工具对混淆后的代码不起作用。使用eval语句:使用eval语句方式实现程序混淆。转义Unicode:将变量值转换为Unicode编码,此项会大大增加文件体积,且很容易还原回去,建议只针对小文件使用。优化代码结构:精简代码,如将多个ifelse结构换为三目运算。重命名全局变量:将全局变量重命名,可能会造成代码执行问题,请根据实际情况选择。重命名属性名:将对象属性名重新命名,可能会造成代码执行问题,请根据实际情况选择。分割变量字符串:将会以10个字符为一个单位,拆分混淆变量值的字符串。数字转表达式:将数字转换为函数表达式的写法,增加复杂度。禁止控制台调试:当控制台打开时终止程序执行,并进入死循环干扰控制台调试。禁止控制台输出:屏蔽一些控制台输出信息,如log,error,debug等方法,减少程序流程提示。二、混淆加密系数&规则混淆加密规则及系数均可以选择关闭相应功能,提高程序的执行效率,系数设置范围为0-1,值越高则混淆加密强度越高,文件体积和代码执行效率会有所下降。变量加密系数:混淆改变您的代码变量名称,值越高看起来越乱。死代码注入系数:死代码也就是花指令,指向正常的程序中注入一些没什么用的废代码,让程序更乱更加难以理解,干扰解密过程。控制流平坦化系数:改变程序的执行流程结构,模糊程序模块之间的前后关系,让程序看起来更加乱,增加程序分析难度。变量加密规则:加密改变变量的方法,base64加密后比rc4执行效率要高,当然没有rc4强度高。三、混淆高级设置高级设置中所有的设置项每项一行,使用回车分隔每一个配置项。安全域名:只允许混淆后的代码在指定的安全域名下执行(支持多个域名,子域名通配符用“.domain.com”表示),在此之外的任何域名下执行均会重定向到所设置的URL中,这样即使您的代码被复制,对方也无法使用,强烈建议设置此项!强制转换的字符串:强制加密编码一些比较敏感的字符串,让寻找及解密难度增大。保留的变量标识符:需要保留的不希望被混淆的一些变量标识符。保留的字符串:需要保留的不希望倍混淆的一些字符串。为何要混淆代码?混淆代码是为了保护您的代码成果,通常有以下几种情形:1、避免让他人通过代码读懂您的产品逻辑,造成商业机密泄露。2、防止一些白嫖党无节操的复制掠夺您的代码成果。3、为客户开发程序,在未收到尾款前用于给客户展示的演示站。4、删除代码注释等无用信息,提高代码文件的网络加载速度。此外,还有很多类似场景...其它提示使用本工具完成代码混淆后,请勿使用其它代码压缩工具(如uglifyjs等)或混淆加密工具二次处理混淆结果,否则可能会造成混淆变量被修改造成脚本无法执行或者混淆失败,也不要使用工具二次混淆,仅混淆加密一次就已经足够安全了。为了代码的完整性,建议混淆完毕后使用工具提供的一键复制或下载保存到本地。工具将会默认记住您的混淆设置,只需设置一次即可,不需要每次使用都重新设置。更多混淆加密细节请参考 JavascriptObfuscator。
微信支付宝收款码合并
工具简介在线微信支付宝收款码二合一制作工具,可以将微信收款码和支付宝收款码合并到同一个图片上方便收款,多个收款码样式可选,可以直接打印粘贴合成后的二合一收款码。本工具只是简单的将微信和支付宝的收款码合并到同一个图片上,方便自行打印粘贴后收款,不是云融合收款码,也不会对您的收款码做任何处理,请放心使用。您可以在微信和支付宝中分别保存下载收款码,使用本工具依次选择后一键完成制作,方便快捷。收款码合成的清晰度取决于您的收款码,如果您合成后收款码中的二维码比较模糊,请选择更清晰的收款码后重新生成。如何使用请分别点击选择微信收款码和支付宝收款码,选择好喜欢的收款码样式,点击合并即可完成微信和支付宝收款码的合并预览图片->鼠标右键->另存为->即可下载收款码;手机长按保存即可。注意选择的微信或支付宝收款码,每个图片仅能有一个二维码,如有多个可能会识别失败。经营过程中请是不是检查下自身二维码,避免被不法分子替换造成收款损失。本工具不支持老保本的浏览器,请使用最新版本的浏览器使用本工具以获得更好的体验。如何获取收款码微信:我->支付->收付款->二维码收款->保存收款码支付宝:首页->收付款->二维码收款->个人收款->保存收款码