设计模式:策略模式 策略模式在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对 2024-01-21 设计模式 > 行为模式 #设计模式
手撸Spring:设计与实现资源加载器,从Spring.xml解析和注册Bean对象(Day5) 一、目标在完成 Spring 的框架雏形后,现在我们可以通过单元测试进行手动操作 Bean 对象的定义、注册和属性填充,以及最终获取对象调用方法。但这里会有一个问题,就是如果实际使用这个 Spring 框架,是不太可能让用户通过手动方式创建的,而是最好能通过配置文件的方式简化创建过程。需要完成如下操作: 如图中我们需要把步骤:2、3、4整合到Spring框架中,通过 Spring 配置文件的方 2024-01-18 手撸spring系列 #源码 #spring
手撸Spring:为Bean对象注入属性和依赖Bean的功能实现(Day4) 一、目标如果类中包含属性那么在实例化的时候,对于属性的填充不仅仅是int、Long、String,还包括还没有实例化的对象属性,都需要在Bean创建时进行填充操作。 暂时不会考虑Bean的循环依赖 二、设计那么属性填充是在Bean使用newInstance或者Cglib创建之后,开始补全属性信息,那么就可以在类AbstractAutowireCapableBeanFactory的createBe 2024-01-10 手撸spring系列 #源码 #spring
手撸Spring:基于DeclaredConstructor实现含构造函数的类实例化策略(Day3) 一、目标实例化方式并没有考虑构造函数的入参,接下来将构造函数的入参加入作为实例化方式 二、设计填平这个坑的技术设计主要考虑两部分,一个是串流程从哪合理的把构造函数的入参信息传递到实例化操作里,另外一个是怎么去实例化含有构造函数的对象。 参考 Spring Bean 容器源码的实现方式,在 BeanFactory 中添加 Object getBean(String name, Object... 2023-12-31 手撸spring系列 #源码 #spring
手撸Spring:运用设计模式,实现 Bean 的定义、注册、获取(Day2) 一、目标对已实现的 Spring Bean 容器进行功能完善,实现 Bean 容器关于 Bean 对象的注册和获取。 二、设计将 Spring Bean 容器完善起来,首先非常重要的一点是在 Bean 注册的时候只注册一个类信息,而不会直接把实例化信息注册到 Spring 容器中。那么就需要修改 BeanDefinition 中的属性 Object 为 Class,接下来在需要做的就是在获取 Be 2023-12-31 手撸spring系列 #源码 #spring
设计模式:模板模式 模板模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 介绍意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 主要解决:一些方法通用,却在每一个子类都重新写 2023-12-30 设计模式 > 行为模式 #设计模式
手撸Spring:定义一个简单的 Spring 容器(Day1) 一、目标:定义一个简单的 Spring 容器Spring Bean 容器是什么?Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种用于承载对象的容器,你可以配置你的每个 Bean 对象是如何被创建的,这些 Bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何相互关联构建和使用的。 当一个 Bean 对象被定义存放以后,再由 Spring 统一进行装配 2023-12-30 手撸spring系列 #源码 #spring
Vector、Stack、TreeMap、TreeSet Vector 特点:类实现了一个可增长的对象数组。像数组一样,它包含可以使用整数索引访问的组件。大小可以根据需要增长或缩小,每个暴露的api方法都带有线程锁,保证了线程安全,同时导致性能较差 默认初始容量:10 最大容量:Integer.MAX_VALUE - 8 自动增长策略:以capacityIncrement的int类型参数来决定每次自动增长的长度,若capacityIncrement的值小 2023-12-28 JAVA核心源码 > util篇 #java #源码
linux常用命令(持续更新中) 1、ls命令就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 常用参数搭配: 1234567ls -a 列出目录所有文件,包含以.开始的隐藏文件ls -A 列出除.及..的其它文件ls -r 反序排列ls -t 以文件修改时间排序ls -S 以文件大小排序ls -h 以易读大小显示ls -l 除 2023-12-26 实用指南 #linux
LinkedHashMap、LinkedHashSet、LinkedList LinkedHashMap(继承自HashMap) 特点:使用双向链表+链表+红黑树方法实现,在继承父类(HashMap)下,用head和tail两个节点来标记链表的头和尾,有一个boolen类型的accessOrder参数,用于控制迭代顺序,ture为访问顺序,false为插入顺序。 构造方式:继承HashMap,且accessOrder默认为false (初始容量、最大容量、默认负载因子、链表 2023-12-26 JAVA核心源码 > util篇 #java #源码