![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 93
玉面大蛟龙
阿里巴巴后端工程师
展开
-
重构——改善既有代码的设计 读书笔记
重构改善既有代码的设计-学习(一):封装-CSDN博客。原创 2024-05-03 00:12:05 · 1037 阅读 · 0 评论 -
重构改善既有代码的设计-学习(六):处理继承关系
无论何时,只要系统内出现重复,你就会面临“修改其中一个却未能修改另一个”的风险。通常,找出重复也有一定的难度。所以,某个函数在各个子类中的函数体都相同(它们很可能是通过复制粘贴得到的),这就需要使用函数上移,也就是。函数上移过程中,被提升的函数可能会引用只出现于子类而不出现于超类的特性。此时,我就得用和先将这些特性(类或者函数)提升到超类。原创 2024-01-28 20:11:01 · 1344 阅读 · 0 评论 -
重构改善既有代码的设计-学习(五):重构API
例如: 改为:2、函数参数化(Parameterize Function) 如果两个函数逻辑非常相似,只有一些字面量值不同,可以将其合并成一个函数,以参数的形式传入不同的值,从而消除重复。 “标记参数”是这样的一种参数:调用者用它来指示被调函数应该执行哪一部分逻辑。 标记参数让人难以理解到底有哪些函数可以调用、应该怎么调用。拿到一份API以后,我首先看到的是一系列可供调用的函数,但标记参数却隐藏了函数调用中存在的差异性。使用原创 2024-01-25 21:29:17 · 662 阅读 · 0 评论 -
重构改善既有代码的设计-学习(四):简化条件逻辑
可以将大块头代码分解为多个独立的函数,根据每个小块代码的用途,为分解而得的新函数命名。对于条件逻辑,将每个分支条件分解成新函数还可以带来更多好处:可以突出条件逻辑,更清楚地表明每个分支的作用,并且突出每个分支的原因。原创 2024-01-24 23:55:59 · 1226 阅读 · 0 评论 -
重构改善既有代码的设计-学习(三):重新组织数据
1、拆分变量(Split Variable)1、拆分变量(Split Variable)有些变量用于保存一段冗长代码的运算结果,以便稍后使用。这种变量应该只被赋值一次。如果它们被赋值超过一次,就意味它们在函数中承担了一个以上的责任。如果变量承担多个责任,它就应该被替换(分解)为多个变量,每个变量只承担一个责任。同一个变量承担两件不同的事情,会令代码阅读者糊涂。有两种情况除外:循环变量(loop variable)会随循环的每次运行而改变(例如for(let i=0;i原创 2024-01-23 21:31:38 · 1121 阅读 · 0 评论 -
重构改善既有代码的设计-学习(二):搬移特性
搬移函数这一章节总结起来就是:在不同的上下文之间搬移元素。原创 2024-01-22 20:18:41 · 918 阅读 · 0 评论 -
重构改善既有代码的设计-学习(一):封装
如果某些客户端先通过服务对象的字段得到另一个对象(受托类),然后调用后者的函数,那么客户就必须知晓这一层委托关系。当一个类因为某种原因开始萎缩(可能是因为一些重构动作移走了这个类的责任),不再承担足够责任,那么他不再有单独存在的理由。例如,本身“图案”这个字段可能只是一个字符串,用来存储一个链接,但后来随着业务的逐渐复杂,开始有尺寸、文案等等,那他们就应该被抽取出来,放在一个类里面。修改的方式是,在类上提供一些修改集合的方法(通常是“添加”、“删除”等),这样就可以使对集合的修改必须经过类。原创 2024-01-20 19:30:37 · 1179 阅读 · 0 评论 -
缓存和数据库,1+1如何大于2?
缓存,简单说就是为了节约对原始资源重复获取的开销,而将结果数据副本存放起来以供获取的方式。首先,。我们前面已经多次提到过,当某一个操作是"幂等"的和“安全"的,那么这样的操作就可以被抽象为对"资源"的获取操作,那么它才可以考虑被缓存。有些操作不幂等、不安全,比如银行转账,改变了目标对象的状态,自然就难以被缓存。其次,。缓存能生效的本质是空间换时间。也就是说,将曾经出现过的数据以占据缓存空间的方式存放下来,在下一次的访问时直接返回,从而节约了通过原始流程访问数据的时间。原创 2023-12-31 17:59:56 · 753 阅读 · 0 评论 -
设计模式学习(十三):Chain of Responsibility责任链模式
先用一句话来概括:Chain of Responsibility模式就是。我们首先看看什么是推卸责任。假设现在我们要去公司领取资料。首先我们向公司前台打听要去哪里领取资料,她告诉我们应该去“营业窗口”。然后等我们到了“营业窗口”后,又被告知应该去“售后部门”。等我们好不容易赶到了“售后部门”,又被告知应该去“资料中心”,因此最后我们又不得不赶往“资料中心"。像这样,在找到合适的办事人之前,我们被不断地踢给一个又一个人,这就是“推卸责任”。原创 2023-04-16 14:10:18 · 297 阅读 · 0 评论 -
设计模式学习(十二):Decorator装饰器模式
假如现在有一块蛋糕,如果只涂上奶油,其他什么都不加,就是奶油蛋糕。如果加上草莓,就是草莓奶油蛋糕。如果再加上一块黑色巧克力板,上面用白色巧克力写上姓名,然后插上代表年龄的蜡烛,就变成了一块生日蛋糕。不论是蛋糕、奶油蛋糕、草莓蛋糕还是生日蛋糕,它们的核心都是蛋糕。不过,经过涂上奶油,加上草莓等装饰后,蛋糕的味道变得更加甜美了,目的也变得更加明确了。程序中的对象与蛋糕十分相似。首先有一个相当于蛋糕的对象,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象。原创 2023-01-24 14:35:27 · 1975 阅读 · 0 评论 -
设计模式学习(十一):Builder建造者模式
大都市中林立着许多高楼大厦,这些高楼大厦都是具有建筑结构的大型建筑。通常,建造和构建这种具有建筑结构的大型物体在英文中称为Build。在建造大楼时,需要先打牢地基,搭建框架,然后自下而上地一层一层盖起来。通常,在建造这种具有复杂结构的物体时,很难一气呵成。我们需要首先建造组成这个物体的各个部分,然后分阶段将它们组装起来。用一句话来概括:Builder模式用于组装具有复杂结构的实例。Builder模式和Abstract Factory模式都用于生成复杂的实例。原创 2023-01-22 16:56:54 · 2807 阅读 · 0 评论 -
设计模式学习(十):lterator迭代器模式
使用Java语言显示数组arr中的元素时,我们可以使用下面这样的for循环语句遍历数组。i++){请注意这段代码中的循环变量i。该变量的初始值是o,然后会递增为1,2,3,...,程序则在每次i递增后都输出arr[i]。我们在程序中经常会看到这样的for循环语句。for语句中的i++的作用是让i的值在每次循环后自增1,这样就可以访问数组中的下一个元素、下下一个元素、再下下一个元素,也就实现了从头至尾逐一遍历数组元素的功能。将这里的循环变量i的作用抽象化、通用化后形成的模式,在设计模式中称为。原创 2023-01-20 15:13:38 · 2106 阅读 · 2 评论 -
设计模式学习(九):Abstract Factory抽象工厂模式
Abstract的意思是“抽象的”,Factory的意思是“工厂”。在Abstract Factory模式中,不仅有“抽象工厂”,还有“抽象零件”和“抽象产品”。抽象工厂的工作是将“抽象零件”组装为“抽象产品”。请大家先回忆一下面向对象编程中的“抽象”这个词的具体含义。它指的是“不考虑具体怎样实现,而是仅关注接口(API )"的状态。例如,抽象方法(Abstract Method)并不定义方法的具体实现,而是仅仅只确定了方法的名字和签名(参数的类型和个数)。原创 2023-01-19 15:55:30 · 1616 阅读 · 2 评论 -
设计模式学习(八):Proxy代理模式
Proxy是“代理人”的意思,它指的是代替别人进行工作的人。当不一定需要本人亲自进行工作时,就可以寻找代理人去完成工作。但代理人毕竟只是代理人,能代替本人做的事情终究是有限的。因此,当代理人遇到无法自己解决的事情时就会去找本人解决该问题。在面向对象编程中,“本人”和“代理人”都是对象。如果,就将其交给“代理人”对象负责。用一句话概况:只在必要时生成实例。原创 2023-01-17 14:43:41 · 1308 阅读 · 0 评论 -
设计模式学习(七):Factory Method工厂模式
在Template Method模式中,我们在父类中规定处理的流程,在子类中实现具体的处理。如果我们将该模式用于生成实例,它就演变为本章中我们所要学习的Factory Method模式。设计模式学习(六):Template Method模板方法模式_玉面大蛟龙的博客Factory有“工厂”的意思。用Template Method模式来构建生成实例的工厂,这就是Factory Method模式。原创 2023-01-15 16:08:54 · 778 阅读 · 0 评论 -
设计模式学习(六):Template Method模板方法模式
通过查看AbstractDisplay类的代码,我们可以知道这3个方法都是抽象方法。也就是说,如果仅仅查看AbstractDisplay类的代码,我们无法知道这3个方法中到底进行了什么样的处理。这是因为open方法、print方法、close方法的实际处理被交给了AbstractDisplay类的子类。这里将display用final来修饰,就是表示子类不能重写display方法。open();i < 5;close();原创 2023-01-15 15:02:48 · 852 阅读 · 0 评论 -
设计模式学习(五):State状态模式
在面向对象编程中,是用类表示对象的。也就是说,程序的设计者需要考虑用类来表示什么东西。类对应的东西可能存在于真实世界中,也可能不存在于真实世界中。在State模式中,我们用类来表示状态。在现实世界中,我们会考虑各种东西的“状态”,但是几乎不会将状态当作“东西”看待。因此,可能大家很难理解“用类来表示状态”的意思。在本文中,我们将要学习用类来表示状态的方法。以类来表示状态后,我们就能通过切换类来方便地改变对象的状态。当需要增加新的状态时,如何修改代码这个问题也会很明确。原创 2023-01-13 17:16:58 · 2225 阅读 · 0 评论 -
设计模式学习(四):Strategy策略模式
使用Strategy模式可以整体地替换算法。使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品。原创 2023-01-11 16:05:00 · 1507 阅读 · 0 评论 -
设计模式学习(三):Adapter适配器模式
我们先举个例子:如果想让额定工作电压是直流12V的笔记本电脑在交流220V的电源下工作,应该怎么做呢?通常,我们会使用适配器,将家庭用的交流220V电压转换成我们所需要的直流12V电压。这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异。在程序世界中,经常会存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。Adapter模式也被称为Wrapper模式。原创 2023-01-07 22:54:14 · 1057 阅读 · 0 评论 -
设计模式学习(二):Observer观察者模式
在Observer模式中,当观察对象的状态发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。简单一句话概况就是:观察者会发送观察对象状态变化的通知。原创 2023-01-06 11:18:54 · 848 阅读 · 0 评论 -
设计模式学习(一):Bridge桥接模式
Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。为了能够根据需求设计出良好的ConcreteImplementor角色,有时我们会使用AbstractFactory模式。原创 2023-01-05 18:36:43 · 998 阅读 · 0 评论 -
阿里巴巴鹰眼系统简介
微服务框架带来的好处十分多,比如说它提高了开发的效率,它具备更好的扩展性。而这些问题也就是我们的鹰眼系统需要解决的问题。原创 2022-07-24 16:25:45 · 5220 阅读 · 0 评论 -
DDD(领域驱动设计)分层架构
DDD全称为(Domain-DrivenDesign,简称DDD),领域驱动设计。原创 2022-07-24 16:43:29 · 10613 阅读 · 4 评论 -
常用设计模式的功能、关联和区别
在Builder模式中,Director 决定了Builder角色中方法的调用顺序,而在Template Method模式中,父类决定了子类方法的调用顺序。使用Bridge模式可以达到类的功能层次结构与类的实现层次结构分离的目的,并在此基础上使这些层次结构结合起来。有时,在 Iterator模式中使用iterator方法生成Iterator的实例时会使用Factory Method模式。Adapter模式用于填补不同接口之间的缝隙,而Decorator模式则是在不改变接口的前提下增加功能。原创 2023-02-04 15:44:07 · 549 阅读 · 0 评论