随笔分类 -  设计模式

摘要:阿里妹导读:什么是 DSL ?DSL 是一种工具,其核心价值在于提供了一种手段,可以更加清晰地就系统某部分的意图进行沟通。本文将通过实现一个状态机引擎来看清 DSL 的本质,介绍状态机的核心模型和 Fluent 接口,并解决状态机的性能问题。最近在一个项目中,因为涉及很多状态的流转,我们选择使用状态 阅读全文
posted @ 2024-09-21 11:44 易先讯 阅读(44) 评论(0) 推荐(0) 编辑
摘要:让我们通过一个具体的例子来说明如何使用索引表驱动法。 示例:保险费率计算 假设我们需要根据客户的吸烟状态、性别、婚姻状况和年龄来计算保险费率。我们可以使用索引表驱动法来简化这个过程。 定义索引表 首先,我们定义一个多维数组来存储不同条件下的保险费率: const int SmokingStatus 阅读全文
posted @ 2024-09-14 11:42 易先讯 阅读(24) 评论(0) 推荐(0) 编辑
摘要:在编程中,避免全局命名空间的命名冲突是一个重要的考虑,因为这有助于保持代码的清晰和可维护性。以下是一些在不同编程语言中划分全局命名空间和避免命名冲突的策略: C++ 和 C# 在 C++ 和 C# 中,可以使用 namespace 关键字来组织代码,避免命名冲突。 cpp // C++ 示例 nam 阅读全文
posted @ 2024-09-06 17:48 易先讯 阅读(62) 评论(0) 推荐(0) 编辑
摘要:首先,把伪代码转变为高层次的注释,并写出第一条和最后一条语句在C++中也就是“{”和“}”。 伪代码示例 /* This routine outputs an error message based on an error code supplied by the calling routine. 阅读全文
posted @ 2024-08-31 15:12 易先讯 阅读(22) 评论(0) 推荐(0) 编辑
摘要:在Go语言中使用调试存根(debugging stubs)可以帮助你在开发和生产环境中有效地进行调试和性能优化。以下是如何在Go中实现类似C++中的调试存根的示例: 开发阶段的调试存根: 在开发阶段,你可以编写一个详细的检查函数来验证传入的指针或其他参数。这些检查可能会比较耗时,但能确保代码的正确性 阅读全文
posted @ 2024-08-31 14:24 易先讯 阅读(5) 评论(0) 推荐(0) 编辑
摘要:尽量使用多态,避免大量的类型检查频繁重复出现的case语句有时是在暗示,采用继承可能是种更好的设计选择--尽管并不总是如此 在面向对象编程中,多态是一种允许你通过一个接口使用多种类型对象的方法。在你提供的例子中,使用 `switch` 或 `case` 语句来根据不同的形状类型调用不同的绘制方法,并 阅读全文
posted @ 2024-08-01 09:56 易先讯 阅读(8) 评论(0) 推荐(0) 编辑
摘要:派生后覆盖了某个子程序,但在其中没做任何操作,这种情况也值得怀疑这通常表明基类的设计中有错误。 举例来说,假设你有一个Cat(猫)类,它有一个Scratch()(抓)成员函数,可是最终你发现有些猫的爪尖儿没了,不能抓了。你可能想从Cat类派生一个叫 scratchiesscat(不能抓的猫)的类,然 阅读全文
posted @ 2024-08-01 09:49 易先讯 阅读(7) 评论(0) 推荐(0) 编辑
摘要:面向对象的编程语言能自动支持对同一 ADT的多份实例的处理。如果你只是在面向对象的环境中工作,那你根本就不用自己操心处理多个实例的实现细节了恭喜你(你可以直接去读下一节“ADT和类”。)!如果你是在像C语言这样的非面向对象的环境中工作,你就必须自己手工实现支持处理多个实例的技术。一般来说,这就意味着 阅读全文
posted @ 2024-07-31 15:23 易先讯 阅读(47) 评论(0) 推荐(0) 编辑
摘要:Q: 不要让 ADT依赖于其存储介质 假设你有一张保险费率表,它太大了,因此只能保存到磁盘上。你可能想把它称做一个“费率文件”然后编出类似RateFile.Read()这样的访问器子程序(accessroutine)。然而当你把它称做一个“文件”时,已经暴露了过多的数据信息。一旦对程序进行修改,把这 阅读全文
posted @ 2024-07-31 14:57 易先讯 阅读(7) 评论(0) 推荐(0) 编辑
摘要:Q: 假设你有一段子程序,通过输入雇用日期和工作级别来查询员工每年获得的休假数量。这段子程序被命名为LookupVacationBenefit()。假设在另一个模块里已经有了一个employee对象,其中包含了雇用日期和工作级别,以及其他一些信息,该模块把这种对象传给LookupVacationBe 阅读全文
posted @ 2024-07-27 17:35 易先讯 阅读(8) 评论(0) 推荐(0) 编辑
摘要:前言 小黑习惯于在讲设计模式时,引入一个具体的业务场景,便于读者能更容易的理解怎么使用。 同样,本期内容先给大家举一个例子,在很多电商网站或者有支付场景的系统中,支持多种支付方式,比如使用银行卡,微信或者支付宝等,那么实际在支付系统内部,不同的支付方式需要请求不同的第三方接口,比如银行卡支付方式需要 阅读全文
posted @ 2024-07-12 14:43 易先讯 阅读(52) 评论(0) 推荐(0) 编辑
摘要:设计模式类图 创建型模式(5种): 工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern) 结 阅读全文
posted @ 2023-09-06 11:04 易先讯 阅读(26) 评论(0) 推荐(0) 编辑
摘要:我们知道,在软件项目中,没有什么能取代好的文档。但是,也需要注意写出的代码有多直观。毕竟,代码越简单自然,用户体验就越好。 在简单的“编程规则”中,我们将忘记我们必须记住的一切,“强制”你记住的 API 是失败的关键证明。 这就是为什么在本文中,我们将介绍该主题并向你展示如何从 Fluent-API 阅读全文
posted @ 2023-08-01 15:30 易先讯 阅读(611) 评论(0) 推荐(0) 编辑
摘要:在本篇文章中,我们来讨论一下Functional Options这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前在Go语言中最流行的一种编程模式。但是,在我们正式讨论这个模式之前,我们需要先来看看要解决什么样的问题。 本文是全系列中第3 / 10篇:Go编程模式 Go编程模式:切片 阅读全文
posted @ 2023-08-01 14:11 易先讯 阅读(33) 评论(0) 推荐(0) 编辑
摘要:接口隔离原则 隔离意味着保持独立,接口隔离原则是关于接口的独立。 该原则描述了很多客户端特定的接口优于一个多用途接口。客户端不应该强制实现他们不需要的函数。 这是一个简单的原则,很好理解和实践,直接看例子。 public interface ParkingLot { void parkCar(); 阅读全文
posted @ 2023-07-29 16:49 易先讯 阅读(24) 评论(0) 推荐(0) 编辑
摘要:依赖倒置原则 依赖倒置原则描述的是我们的 class 应该依赖接口和抽象类而不是具体的类和函数。 在这篇文章(2000)里,Bob 大叔如下总结该原则: “如果 OCP 声明了 OO 体系结构的目标,那么 DIP 则声明了主要机制”。 这两个原则的确息息相关,我们在讨论开闭原则之前也要用到这一模式。 阅读全文
posted @ 2023-07-29 16:49 易先讯 阅读(13) 评论(0) 推荐(0) 编辑
摘要:里氏替换原则 里氏替换原则描述的是子类应该能替换为它的基类。 意思是,给定 class B 是 class A 的子类,在预期传入 class A 的对象的任何方法传入 class B 的对象,方法都不应该有异常。 这是一个预期的行为,因为继承假定子类继承了父类的一切。子类可以扩展行为但不会收窄。 阅读全文
posted @ 2023-07-29 16:46 易先讯 阅读(27) 评论(0) 推荐(0) 编辑
摘要:开闭原则 开闭原则要求“class 应该对扩展开放对修改关闭”。 修改意味着修改存在 class 的代码,扩展意味着添加新的功能。 这个原则想要表达的是:我们应该能在不动 class 已经存在代码的前提下添加新的功能。这是因为当我们修改存在的代码时,我们就面临着创建潜在 bug 的风险。因此,如果可 阅读全文
posted @ 2023-07-29 16:36 易先讯 阅读(16) 评论(0) 推荐(0) 编辑
摘要:SOLID 原则是面向对象 class 设计的五条原则。他们是设计 class 结构时应该遵守的准则和最佳实践。 通常,这五个原则可以帮助我们了解设计模式和软件架构。这是每个开发人员都应该了解的主题。 这篇文章介绍了在项目中使用 SOLID 原则的细节。 首先我们先看一下 SOLID 原则的历史。然 阅读全文
posted @ 2023-07-29 16:33 易先讯 阅读(55) 评论(0) 推荐(0) 编辑
摘要:阅读用时:4分钟 导语 “成熟的工具,要学会自己写代码”。本文介绍了 Go 依赖注入工具 [[Wire]] 及其使用方法,以及在实践中积累的各种运用技巧。当代码达到一定规模后,[[Wire]] 在组件解耦、开发效率、可维护性上都能发挥很大的作用,尤其在大仓场景。 依赖注入 当项目变得越来越大,代码中 阅读全文
posted @ 2023-03-03 18:09 易先讯 阅读(525) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示