
设计模式在jdk、spring源码中的应用
kawaniu
这个作者很懒,什么都没留下…
展开
-
ArrayList:迭代器
类间关系:观察方法,注意iterator和iterable的区别原创 2021-07-20 08:29:12 · 156 阅读 · 0 评论 -
Arrays的Comparator:策略
根据传入的排序算法决定排序方式:排序接口:用匿名内部类、实现类、Lambda方式实现接口,传入sort方法原创 2021-07-19 08:31:13 · 206 阅读 · 2 评论 -
FileVisitor、BeanDefinitionVisitor:访问者
该方法可以很容易的对目录下的所有文件进行遍历Path 是要遍历文件的路径,FileVisitor 可看成一个文件访问器遍历过程中的关键过程:允许在文件被访问、目录将被访问、目录已被访问、发生错误等过程中进行控制(这个接口在文件被访问前、访问中和访问后,以及产生错误的时候都有相应的钩子程序进行处理)FileVisitResult是一个枚举类,代表返回之后的一些后续操作通过访问者去遍历文件树:查找文件夹内符合某个条件的文件或者某一天内所创建的文件,这个类中都提供了相对应的方法.原创 2021-07-19 08:30:23 · 385 阅读 · 0 评论 -
java.util.Timer的schedule(...):中介者
所有schedule()方法都指向sched():所有任务task都放到任务队列queue中,同事间通信通过Timer来协调完成内部类管理同事类:原创 2021-07-19 08:29:17 · 185 阅读 · 0 评论 -
SpelExpressionParser:解释器
测试入口:public static void main(String[] args) { SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("10*5+8*(19+2)/6"); Integer value = (Integer) expression.getValue(); System.out.printl原创 2021-07-19 08:28:30 · 3664 阅读 · 0 评论 -
DispatcherServlet的doDispatch()-处理请求:职责链
类间关系:依赖HandlerExecutionChain类获取处理请求的controller:传入请求,去职责链的第一个环节:后边的职责链环节:原创 2021-07-19 08:27:48 · 141 阅读 · 0 评论 -
JDBCTemplate:命令
类间关系:命令接口:执行query(...)方法里有个内部类,是命令接口的子类,具体命令直接实现接口的功能,并没有依赖具体的命令执行者去实现功能,所以这个内部类既是命令实现类又是命令接收者execute(命令接口实现类)方法:JDBCTemplate通过该方法下达并执行命令,参数为命令的实现类,此时命令实现类就成了命令执行者...原创 2021-07-19 08:26:38 · 199 阅读 · 0 评论 -
IOC容器初始化的refresh():模板
类间关系:将模板方法抽象到接口里:重写钩子方法:重写模板方法里的抽象方法:原创 2021-07-19 08:25:58 · 92 阅读 · 0 评论 -
Observable:观察者
和demo中标准方案不同,极类似于demo中的传统方案,在原来的基础上添加了管理观察者的方法原创 2021-07-19 08:25:22 · 111 阅读 · 0 评论 -
AOP:代理
类间关系:创建代理类的接口:根据配置创建代理对象:---jdk代理---jdk代理生成代理对象,该类实现了InvocationHandler接口:被代理对象是通过配置或注解的到的,而不是直接聚合到该类:被代理对象实现了接口:---Cglib代理---同样构造函数传AdvisedSupport类,图略:可传ClassLoader获取一个SmartClassLoader:---ObjenesisCglib,代理工厂创建的代理类---可.原创 2021-07-19 08:24:17 · 98 阅读 · 0 评论 -
Integer.valueOf():享元
提前创建好缓存池原创 2021-07-19 08:23:34 · 108 阅读 · 0 评论 -
mybatis的Configuration:外观
类间关系:Configuration组合功能类:隔了一层,通过MetaObject组织功能类方法:方法实现:原创 2021-07-18 21:40:28 · 126 阅读 · 0 评论 -
FilterInputStream:装饰者
DataInputStream dis= new DataInputStream(new FileInputStream("路径"));InputStream继承结构:原创 2021-07-18 21:37:34 · 205 阅读 · 0 评论 -
HashMap:组合
demo中非叶子节点通过Component提供的方法管理子节点、叶子节点ComponentImpl也是通过Component提供的方法管理leaf原创 2021-07-18 21:36:25 · 109 阅读 · 0 评论 -
DriverManager:桥接
Driver使用了DriverManager:用x+y组合好的对象原创 2021-07-18 21:35:49 · 133 阅读 · 0 评论 -
DispatcherServlet的doDispatch()-获取controller:适配器
适配器相关类图:根据HttpServletRequest request获取对应的控制器(Controller),获取处理该Controller的适配器,通过适配器调用该Controller方法,返回ModelAndView根据request遍历controller,获取和url匹配的controller:不同的适配器调不同controller的方法:通过参数强转调用具体controller的方法,返回ModelAndView...原创 2021-07-18 21:35:05 · 374 阅读 · 0 评论 -
Runtime:单例(饿汉式)
原创 2021-07-18 21:34:18 · 156 阅读 · 0 评论 -
ApplicationContext的getBean():原型、单例
看了上篇封装方法,大家多少也会点儿了吧,下面该说UI常用的封装了,也就是带参数的封装。封装,可以是一个过程的封装(void),也可以是对一个结果的封装:int,string等,需要return一个结果,这个方法就代表封装处理后的最终结果(想想三层里DAL层的封装),封装是为了使代码更灵活,怎么做?参数。没错,就是把一个方法里死的值写活,在调用这个方法时再给它赋值,这样一个方法就可以解决很多类似的问题了。看下面例子...原创 2021-07-18 21:33:44 · 1812 阅读 · 1 评论 -
StringBuilder:建造者
工厂:关注点在产品,对产品没有约束可通过工厂封装对象的初始属性建造者:关注点在产品属性,构造属性的过程复杂但又相似,不同的构造方式得到表现不同的产品指挥者封装了构造属性、创建对象的流程总结:对象多样化,可顺带为属性赋初值用工厂;属性赋值复杂用建造者...原创 2021-07-18 21:30:54 · 123 阅读 · 0 评论 -
Calendar.getInstance():简单工厂
public static Calendar getInstance(){ return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));}private static Calendar createCalendar(TimeZone zone, Locale aLocale) { .原创 2021-07-18 21:29:53 · 327 阅读 · 0 评论