09 2022 档案

摘要:享元模式(Flyweight) 运用共享技术有效地支持大量的细粒度对象 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行是代价——主要指内存需求方面的代价。 主要思想其实就是设置好一个对象池,如果对象的销毁则返回到池中,需要使用对象则可以从池中获取所需要的对 阅读全文
posted @ 2022-09-28 16:03 鐡道 阅读(23) 评论(0) 推荐(0) 编辑
摘要:单例模式(Singleton) 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 在软件系统中,经常有这样一个特殊的类,必须保证它们在系统中只存在一个示例,才能确保他们的逻辑正确性、以及良好的效率。 这应该是类设计者的责任,而不是使用者的责任。 懒汉式(线程不安全) public class 阅读全文
posted @ 2022-09-28 16:02 鐡道 阅读(88) 评论(0) 推荐(0) 编辑
摘要:构建器(Builder) 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,期通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却 阅读全文
posted @ 2022-09-27 15:25 鐡道 阅读(280) 评论(0) 推荐(0) 编辑
摘要:原型模式(Prototype) 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有着比较稳定一直的接口。 假设将工厂模式中的ISplitter和SplitterF 阅读全文
posted @ 2022-09-27 15:23 鐡道 阅读(40) 评论(0) 推荐(0) 编辑
摘要:TreeMap源码分析 数据结构 TreeMap使用红黑树来存储数据,红黑树是一种平衡二叉查找树,它是一种高效的搜索算法,它的算法时间复杂度是O(lgn) 增删改查 增改 public V put(K key, V value) { // 先获取根节点 Entry<K,V> t = root; // 阅读全文
posted @ 2022-09-27 12:53 鐡道 阅读(25) 评论(0) 推荐(0) 编辑
摘要:ArrayList源码分析 默认大小 // 根据传入的初始化大小创建对应的数组大小 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { // 根据传入的值、创建对应的Object数组 this.elementData 阅读全文
posted @ 2022-09-27 10:54 鐡道 阅读(15) 评论(0) 推荐(0) 编辑
摘要:抽象工厂(Abstract Factory) 提供一个接口,让该接口负责创建一系列“性关系或相互依赖的对象”,无需指定他们的具体类。 在软件系统中,经常会面临着“一系列相互依赖的对象”的创建工作,同时由于需求的变化,往往存在着更多系列对象的创建工作。 假设需要写一个数据访问层,那么需要创建一系列对象 阅读全文
posted @ 2022-09-25 15:55 鐡道 阅读(36) 评论(0) 推荐(0) 编辑
摘要:工厂方法(Factory Method) 定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使得一个类的实例化延迟(目的:解耦)到子类。 在软件系统中,经常会面临着创建对象的工作,由于需求变化,需要创建的对象的具体类型也会经常的变化 假设还是拿之前的文件分割器作为例子 阅读全文
posted @ 2022-09-25 15:11 鐡道 阅读(33) 评论(0) 推荐(0) 编辑
摘要:LinkedList源码分析 Node节点类 Node节点用于指向上一个节点和下一个节点、还有存在在链表中的值 private static class Node<E> { // 传入链表中的值 E item; // 用于指向下一个Node节点 Node<E> next; // 用于指向上一个Nod 阅读全文
posted @ 2022-09-23 20:01 鐡道 阅读(18) 评论(0) 推荐(0) 编辑
摘要:SpringMVC工作原理源码分析 首先、当请求进入Tomcat时、在web.xml查找对应的Servlet类、找到DispatcherServlet类并且匹配路径 /、现在创建DispatcherServlet类的示例、并开始执行service方法、即Servlet类的初始方法、Dispathch 阅读全文
posted @ 2022-09-21 19:56 鐡道 阅读(17) 评论(0) 推荐(0) 编辑
摘要:桥模式(Bridge) 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化 如何应对这种多维度的变化?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化、而不引入额外的复杂度 原先 假设有如下的通信的伪码描述包括登陆、发信息、播放音乐等等的功能,同时也支持不同 阅读全文
posted @ 2022-09-21 17:16 鐡道 阅读(181) 评论(0) 推荐(0) 编辑
摘要:装饰模式(Decorator) 在某些情况下,我们可能会“过度的使用继承来扩展对象的功能”,由于继承为类型引入静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的在增多),各种子类的组合(扩展功能的组合)会导致子类的膨胀。 如何使对象功能的扩展能够根据需要来动态地实现、同时避免扩展功 阅读全文
posted @ 2022-09-20 18:55 鐡道 阅读(77) 评论(0) 推荐(0) 编辑
摘要:在软件构建的过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,其他对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使得软件不能很好的抵御变化。 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 观 阅读全文
posted @ 2022-09-19 20:13 鐡道 阅读(52) 评论(0) 推荐(0) 编辑
摘要:Strategy(策略模式) 定义一系列算法,把他们一个个封装起来,并且是他们可以互相替换(变化)。该模式似的算法可以独立于使用它的客户程序(稳定的)而变化(扩展,子类) 动机(Motivation) 在软件构建的过程中,某些对象使用的算法可能是多种多样的,经常改变,如果将这些算法都编码到对象中,将 阅读全文
posted @ 2022-09-18 15:15 鐡道 阅读(59) 评论(0) 推荐(0) 编辑
摘要:直接上代码、先按原来开发步骤、在重构到模式、即在现成代码间寻找变化点、在使用对应的设计模式! 原先 按流程执行代码 import org.junit.Test; // 程序库开发人员 class Library { public void step1() {} public void step3() 阅读全文
posted @ 2022-09-17 11:38 鐡道 阅读(33) 评论(0) 推荐(0) 编辑
摘要:查找 二分查找 时间复杂度:O (logN) 说明:取数组中间的值和查找值进行比较、如果 中间的值大于要查找的值、则高位索引往中间索引-1、小于则是低位索引往上提、即中间索引+1、一直循环直至找到值、最后没有找到则返回-1 /** * 二分查找法 * @return 返回查找的索引、没有则返回-1 阅读全文
posted @ 2022-09-08 10:02 鐡道 阅读(116) 评论(0) 推荐(0) 编辑
摘要:并发编程AQS源码分析 AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。它是一个Java提高的底层同步工具类,比如CountDownLatch、ReentrantLock,Semaphore,Reentran 阅读全文
posted @ 2022-09-08 09:37 鐡道 阅读(56) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示