随笔分类 - 设计模式
摘要:原型模式 原型模式的原理与应用 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Desi
阅读全文
摘要:工厂方法 简单工厂(Simple Factory) 文中举例 在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象Ru
阅读全文
摘要:单例模式 为什么要使用单例? 单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 实战案例一:处理资源访问冲突 文中样例 一个往文件中打印日志的 Logger 类。 构造方法中
阅读全文
摘要:第三部分:理论五 命名 1、命名多长最合适? 长的命名可以包含更多的信息,更能准确直观地表达意图,但最好不要长到两行的程度,影响代码的可读性。 在足够表达其含义的情况下,命名当然是越短越好。对于一些默认的、大家都比较熟知的词,我比较推荐用缩写。 对于作用域比较小的变量,我们可以使用相对短的命名,比如
阅读全文
摘要:第三部分:理论四 “解耦”为何如此重要? 软件设计与开发最重要的工作之一就是应对复杂性。 如果说重构是保证代码质量不至于腐化到无可救药地步的有效手段,那么利用解耦的方法对代码重构,就是保证代码不至于复杂到无法控制的有效手段。 “高内聚、松耦合”是一个比较通用的设计思想,不仅可以指导细粒度的类和类之间
阅读全文
摘要:第三部分:理论三 编写可测试代码案例实战 测试类 Transaction 是经过抽象简化之后的一个电商系统的交易类,用来记录每笔订单交易的情况。 execute() 函数负责执行转账操作,将钱从买家的钱包转到卖家的钱包中。 在execute() 中,真正的转账操作是通过调用 WalletRpcSer
阅读全文
摘要:第三部分:理论二 如何保证重构不出错呢? 需要熟练掌握各种设计原则、思想、模式,还需要对所重构的业务和代码有足够的了解。 除了这些个人能力因素之外,最可落地执行、最有效的保证重构不出错的手段应该就是单元测试(Unit Testing)了。 什么是单元测试? 文中举例,测试 Text 类中的 toNu
阅读全文
摘要:第三部分:理论一 关于重构安排了六节课,主要包含一下几个方面: 对重构概括性的介绍,包括重构的目的(why)、对象(what)、时机(when)、方法(how) 保证重构不出错的手段,这里我会重点讲解单元测试和代码的可测试性 不同规模的重构,重点讲解大规模高层次重构(比如系统、模块、代码结构、类与类
阅读全文
摘要:第二部分:实战二 实战二(上) 项目背景 文中举例,设计开发一个小的框架,能够获取接口调用的各种统计信息,并且支持将统计结果以各种显示格式输出到各种终端,以方便查看。 需求分析 性能计数器作为一个跟业务无关的功能,我们完全可以把它开发成一个独立的框架或者类库,集成到很多业务系统中。 作为可被复用的框
阅读全文
摘要:第二部分:实战一 实战一(上) 需求分析 文中举例,一个积分兑换系统的开发实战,技术人员应该更多地参与到产品设计中。 作为技术人,我该怎么做产品设计呢?首先,一定不要自己一个人闷头想。一方面,这样做很难想全面。另一方面,从零开始设计也比较浪费时间。所以,我们要学会“借鉴”。 除了“借鉴”的思路,还可
阅读全文
摘要:第二部分:理论八 理论八 何为“高内聚、松耦合”? “高内聚、松耦合”是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。 “高内聚”用来指导类本身的设计,“松耦合”用来指导类与类之间依赖关系的设计。 那到底什么是“高内聚”呢? 所谓高内聚,就是指相近的功
阅读全文
摘要:第二部分:理论七 理论七 DRY 原则(Don’t Repeat Yourself) DRY 原则,英文描述为:Don’t Repeat Yourself。中文直译为:不要重复自己。将它应用在编程中,可以理解为:不要写重复的代码。 三种典型的代码重复情况,它们分别是:实现逻辑重复、功能语义重复和代码
阅读全文
摘要:第二部分:理论五 理论五 控制反转(IOC) 控制反转的英文翻译是 Inversion OfControl,缩写为 IOC。 文中举例,测试类 UserServiceTest 中一个测试方法 doTest(),程序员可以在业务代码的任何地方调用 doTest() 方法,所有的流程都由程序员来控制。
阅读全文
摘要:第二部分:理论六 理论六 如何理解“KISS 原则”? KISS 原则的英文描述有好几个版本,比如:Keep It Simple and Stupid,翻译成中文就是:尽量保持简单。 代码的可读性和可维护性是衡量代码质量非常重要的两个标准。而KISS 原则就是保持代码可读和可维护的重要手段。 代码行
阅读全文
摘要:第二部分:理论四 理论四 如何理解“接口隔离原则”? SOLID 中的英文字母“I”,接口隔离原则,英文翻译是“ Interface Segregation Principle”,缩写为 ISP。 客户端不应该强迫依赖它不需要的接口。 如何理解“接口”二字? 把“接口”理解为一组 API 接口集合
阅读全文
摘要:第二部分:理论三 理论三 如何理解“里式替换原则”? 里式替换原则的英文翻译是:Liskov Substitution Principle,缩写为 LSP。 子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of bas
阅读全文
摘要:第二部分:理论二 如何理解“对扩展开放、修改关闭”? 开闭原则 开闭原则:SOLID 中的第二个原则,英文全称是 Open Closed Principle,简写为OCP。 开闭原则是 SOLID 中最难理解、最难掌握,同时也是最有用的一条原则。 对扩展开放、修改关闭,直接影响代码的扩展性,扩展性是
阅读全文
摘要:第二部分:理论一 理论一 如何理解单一职责原则(SRP)? SOLID原则中的S指的就是单一职责原则 SRP:Single Responsibility Principle(A class or module should have a single reponsibility) class类,mo
阅读全文
摘要:第一部分:实战二 实战二(上) 案例介绍和难点剖析 以一个真实的开发案例,从基础的需求分析、职责划分、类的定义、交互、组装运行讲起,将最基础的面向对象分析、设计、编程的套路给你讲清楚,为后面学习设计原则、设计模式打好基础。 真实案例,给你的微服务增加接口调用鉴权功能。 需求不明确 leader 给到
阅读全文
摘要:第一部分:实战一 实战一(上) 什么是基于贫血模型的传统开发模式? 基于MVC架构的代码样例就是典型的贫血模型开发。 此样例中,UserEntity 和 UserRepository 组成了数据访问层,UserBo 和 UserService 组成了业务逻辑层,UserVo 和 UserContro
阅读全文

浙公网安备 33010602011771号