- 博客(108)
- 收藏
- 关注
原创 Head First设计模式(十三) 设计原则 现实世界中的模式
描述对象之间的关系,而且对象模式主要通过组合定义。对象模式中的关系通常在运行时创建,更加动态和有弹性。牵涉到对象实例化,这类模式都提供一种将客户从需要实例化的对象中解耦的方式。:描述业务,顾客和数据之间的交互,可以应用于如何高效决策并沟通决策等问题。就是你所追求的东西:一个通用的设计,所有人都可以用来解决目标和约束集。指在此上下文中你想要达到的目标,但也要考虑该上下文中发生的任何约束。类模式中的关系是在编译时建立的。:用来创建生气勃勃的建筑,城镇和城市的架构。:是创建系统级架构的模式。
2025-12-22 17:41:51
395
原创 Head First设计模式(十二) 设计原则 复合模式
模式通常被一起使用,并结合在同一个设计解决方案中。复合模式在一个解决方案中结合两个或多个模式,以解决一般的或重复发生的问题。 呈现模型,视图通常直接从模型中取得显示所需的状态和数据。 取得用户输入并解读其对模型的含义。 模型持有所有数据,状态和应用逻辑。模型对视图和控制器是无视的,虽然它提供了操纵和检索其状态的接口,并发送状态改变通知给观察者。
2025-12-19 16:44:44
158
原创 Head First设计模式(十一) 设计原则 代理模式
在对象创建前和创建时,虚拟代理也会扮演对象的替身。复杂隐藏代理用来隐藏一个类的复杂集合的复杂度,并控制访问。复杂隐藏代理和外观模式的区别是,代理控制访问,而外观模式只提供了另外的一组接口。调用代理的方法,会通过网络转发到远程来调用,结构返回给代理,再由代理将结果转给客户。写入时复制代理控制对象的复制,做法是延迟对象的复制,直到客户需要为止。这是虚拟代理的变体。智能引用代理当主题被引用时,提供额外的动作,例如计算一个对象被引用的次数。防火墙代理控制网络资源的访问,保护主题免于“坏”客户的侵害。
2025-12-08 14:59:36
395
原创 Head First设计模式(十) 设计原则 状态模式
context随时(把责任)委托给这些状态之一。随着时间的推移,当前状态不断在各个状态对象之间改变,以反映context的内部状态,因此,context的行为也。如果你使用继承定义了一个类的行为,那么你就和这个行为粘在一起了,很难改变。有了策略,你可以通过组合不同的对象改变行为。,通过把行为封装进状态对象,你可以简单地在context中改变状态对象来改变其行为。现在,虽然模式提供了弹性,可以在运行时改变策略对象,
2025-11-25 17:13:44
407
原创 Head First设计模式(九) 设计原则 迭代器和组合模式
而不是聚合上,这样就简化了聚合的接口和实现,让责任放在合适的地方。,这个接口包含一堆有用的方法,用来操纵一组对象。换句话说,在大多数情况下我们可以。这些类中的每一个都实现。使用组合结构,我们可以对。
2025-11-25 15:22:24
375
原创 Head First设计模式(七) 设计原则 适配器模式 外观模式
但这到底是什么意思?意思是,当你在设计一个系统时,对于任何对象,都要注意它所交互的类的数量,以及它和这些类如何交互。这个原则防止我们创建有大量的类在一起的设计,免得系统一部分的变化会连锁影响到其他部分。当你在许多类之间造成许多依赖时,你的系统就是一个易碎的系统,需要花费许多成本维护,而且复杂得难以让别人理解。
2025-11-24 14:20:23
312
原创 Head First设计模式(六) 设计原则 命令模式
当你不想返回一个有意义的对象时,以及你要把处理null的责任从客户移除时,空对象就很有用。例如,在我们的遥控器中,没有一个有意义的对象来分配给每个槽,因此我们提供一个NoCommand对象作为替身,在excute()方法被调用时,不做任何事情。这种记录日志的方式对遥控器来说没有意义,但是,有很多应用调用大型数据结构的动作,不能每一次出现变化都快速保存。有了宏命令,你可以动态地决定哪一个命令进入宏命令,因此,其实相当容易,不只是保持一个到上一个已执行命令的引用,而是保持一个之前命令的。
2025-11-20 15:03:32
947
原创 Head First设计模式(三) 设计原则 装饰者模式
OK,我了解观察者,但是通常怎样将某件东西设计成。对扩展开发和对修改关闭?我怎么知道哪个区域的。
2025-11-19 14:35:30
334
原创 Head First设计模式(1.5)共享词汇
当高级开发人员使用设计模式时,初级开发人员也会被推动来学习设计模式,从而在你的组织建立一个模式用户的社群。当你使用模式和另一个开发人员或你的团队沟通时,你沟通的不只是模式名称,还有一整套模式所代表的。当你在描述中使用模式的时候,其他开发人员会很快地准确了解你大脑中的设计。对于设计模式有深入了解的团队,相互之间。使用模式谈论软件系统,能让你把讨论。,能更快速地向前走。
2025-11-19 10:13:20
154
原创 Head First设计模式(一) 设计原则 策略模式
换句话说,如果每次有新的需求,某方面的代码就要变,那么你就知道了,这个行为需要抽出来,与其他不变的代码分离。“接口”一词在这里有多个含义。接口是一个概念,也是Java的一个构造。更棒的是,字类型实例化不用再代码中硬编码(像new Dog()),而是。尽管这个概念很简单,它却是几乎每一个设计模式的基础。,这意味着类声明时不必知道实际的对象类型!我们可以重新描述“针对超类型编程”为“,这样,分配给这些变量的对象可以是。要点是通过针对超类型编程来利用。,这样,实际的运行时。
2025-11-14 11:22:47
222
原创 sql查询 笛卡尔积 子查询
子查询 `summary` 对 `table_b` 表按照 `column_a` 进行了 `GROUP BY` 操作。- `table_a` 与子查询结果 `summary` 通过 `column_a` 字段进行 `LEFT JOIN`- 使用 `SUM()` 聚合函数处理 `column_b` 和 `column_c` 字段。- 由于子查询中每个 `column_a` 值唯一,主表每条记录最多匹配一条子查询记录。- 子查询预先对 `table_b` 中重复的 `column_a` 值进行聚合。
2025-11-10 17:43:20
213
原创 查询修正字段sql记录
这段SQL语句的作用是生成修改表结构的ALTER语句,用于将数据库中所有包含pruduction_date列的表中的该列名更正为production_date(修复拼写错误),同时保持列的数据类型为DATE。:MySQL中用于修改列定义的语法,这里将pruduction_date列更名为production_date,并保持其数据类型为DATE。:筛选条件,只选择列名为pruduction_date(拼写错误的列名)的记录。:MySQL系统视图,包含了所有数据库表的列信息。表,表示包含目标列的表名。
2025-11-01 10:57:16
231
原创 REST 表征状态转移
REST(表征状态转移)是一种基于资源的网络架构风格,其核心思想是将数据抽象为独立资源,通过标准化接口进行操作。REST包含六大原则:客户端-服务端分离、无状态、可缓存、分层系统、统一接口和按需代码。与传统RPC面向过程的设计不同,REST采用面向资源的设计方式,通过HTTP标准方法(GET/POST等)实现资源的CRUD操作,每个请求都包含完整上下文信息以实现无状态交互。这种架构降低了系统复杂性,提高了可扩展性,但也存在对HTTP协议的强依赖性。
2025-10-24 17:10:10
768
原创 复杂查询:直接查询/子查询/视图/CTE
是SQL中的一种临时结果集,可以在SELECT、INSERT、UPDATE或DELETE语句中引用。PostgreSQL: 较早版本就已支持。Oracle: 较早版本就已支持。: 将多层嵌套的子查询转换为清晰的CTE结构。: 处理树形结构数据(如组织架构、分类目录): 当同一子查询需要多次使用时。: 分步进行数据处理和分析。
2025-09-26 14:08:23
388
原创 @Autowired @Resource IDE警告 和 依赖注入
摘要: 本文探讨了Spring依赖注入中的常见问题与最佳实践。 @Autowired与@Resource区别:前者来自Spring框架,默认按类型装配;后者是Java标准,默认按名称装配。部分IDE对@Resource的支持更友好。 字段注入不推荐:Spring官方建议使用构造器注入,因其支持不可变性、强制依赖和易测试性,而字段注入存在依赖不透明、测试困难等问题。 三种注入方式对比: 构造器注入:强制依赖、不可变,但参数过多时影响可读性; Setter注入:灵活但依赖可变,易遗漏; 字段注入:简洁但依赖容器
2025-08-15 14:40:43
916
原创 容器 K8S CRI CNI CSI 学习(二)
本文介绍了Kubernetes中的三大关键接口:CRI(容器运行时接口)、CNI(容器网络接口)和CSI(容器存储接口),它们分别负责容器运行时、网络和存储的标准化管理。文章详细阐述了Kubernetes从早期依赖Docker到逐步支持CRI-O、containerd等容器运行时的演进过程。在存储系统方面,对比了块存储、文件存储和对象存储三种形式,解释了文件分配表(FAT)和文件系统的工作原理,展示了如何通过元数据管理实现文件的高级功能。这些接口和存储技术的标准化推动了容器生态的发展。
2025-08-13 11:20:24
826
原创 容器 K8S Docker Kata 学习(一)
使用容器技术来提供应用的隔离,所以在钻研之前, 需要通过熟悉容器的基本知识来更加深入地理解包括认识到存在的容 器技术分支, 诸如或者。什么是容器:用Linux容器技术隔离组件:开发者不是使用虚拟机来隔离每个(或者通常说的软件进程), 而是正在转向容器技术。容器允许你在同一台机器上运行多个服务, 不仅提不同的环境给每个服务, 而且将它们互相隔离。容器类似虚拟机, 但开销小很多。一个容器里运行的进程实际上运行在上, 就像所有其他进程一样(不像虚拟机, 进程是上的)。
2025-08-11 10:35:12
751
原创 程序员的职业素养-The Clean Coder
软件专业人士?1.清楚你要做什么 2.担当责任 3.不行损害之事 4.职业道德简单来讲,就是尽职尽责,对自己犯下的错误负责。代码中难免会出现bug,但这并不意味着你不用对它们负责;没人能写出完美的代码,但这并不代表你不用对不完美负责。测试驱动开发(TDD):先写测试,再写要测的代码。
2025-08-04 11:30:16
921
原创 架构是演进的——凤凰架构
作者的凤凰指的是(不死鸟)本书介绍了架构演进的历史:架构并不是被发明出来的,而是持续演进的结果。软件架构风格从大型机(Mainframe),到(Distributed),到(Monolithic),到(Service-Oriented),到(Microservices),到(Service Mesh),到(Serverless)……技术架构上确实呈现出“从大到小”的发展趋势。,比系统的任何其他属性,包括准确性、一致性和完整性,都来得更加重要。——,1991可能与绝大多数人心中的认知会有差异,“
2025-07-30 10:57:24
847
原创 模式结构-微服务架构设计模式
需求部分描述了必须解决的问题和围绕这个问题的特定上下文环境。需求有时候是相互冲突的,所以。哪一个需求更重要,取决于他的上下文。你必须把。
2025-07-18 16:39:51
371
原创 RESTful API 设计规范
是一种遵循REST架构风格的应用程序编程接口,它通过统一的HTTP方法(如GET、POST、PUT、DELETE)对网络资源进行操作,强调无状态通信、资源标识和可扩展性。一切网络实体(如用户、订单)均抽象为资源,每个资源通过唯一URI标识(如/users/123),URI设计需具有自描述性和可寻址性。灵活性:资源的多重表示(如JSON、HTML)适应不同客户端需求。协议无关性:虽常基于HTTP,但REST本身不依赖特定协议。易维护性:清晰的URI和HTTP语义降低团队协作成本。
2025-06-25 10:41:59
677
原创 谷歌浏览器插件记录
Washbaidu: 一个很努力提升百度搜索体验的插件 - 发现频道 - 小众软件官方论坛沉浸式翻译 - 免费双语对照网页翻译插件
2025-06-24 17:06:44
178
原创 VO,DTO,BO,PO,DO
数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,更符合泛指用于展示层与服务层之间的数据传输对象。持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。BO:一般只在service层,业务逻辑对象,对PO的整合数据,不一定完全对应PO。
2025-06-24 16:01:38
447
原创 Yaml文件读写的几种方式(JAVA)
Ymal: YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。 数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。1.SnakeYam...
2022-05-21 15:45:56
7918
原创 Mybaties、MP日志打印配置
修改application.yaml文件:将mybaties-puls中,log-impl改为Log4j2Impl;(使用log4j作为日志打印)mp自带三种log-impl:(1)NoLoggingImpl:不打印,打印日志为空方法,是否启用强制返回false;(2)StdOutImpl:打印到控制台,打印日志为syso,是否启用强制返回true;(3)Slf4jImpl:打印到文件,打印日志为log,log.isDebugenabled();修改log4j2.xml文件:
2022-05-05 17:48:18
1001
原创 MyBatis-Plus基础(一)
官网:简介 | MyBatis-PlusMyBatis-Plus(opens new window)(简称 MP)是一个MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。注:字面意思,MyBatis的增强,进一步简化了sql等的编写;特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操...
2022-03-25 18:48:02
1678
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅