随笔分类 -  Java

1
摘要:中介者(Mediator) 用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各个对象不需要显示的相互引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化),而且可以独立的改变他们之间的交互。 动机 在软件构建的过程中,经常出现多个对象互相关联交互的情况,对象之间常常会维持一种复 阅读全文
posted @ 2022-10-12 17:30 鐡道 阅读(53) 评论(0) 推荐(0) 编辑
摘要:适配器(Adapter) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 代码 //目标接口(新接 阅读全文
posted @ 2022-10-10 18:47 鐡道 阅读(89) 评论(0) 推荐(0) 编辑
摘要:代理模式(Proxy) 在面向对象系统中,有些对象由于某种原因(比如对象创建开销很大或者某些操作需要安全控制或者需要进程外访问等),直接访问会给使用者、或者系统结构带来很多的麻烦。 为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。 Spring的AOP就是一种代理模式、对某个类方法进 阅读全文
posted @ 2022-10-09 15:01 鐡道 阅读(65) 评论(0) 推荐(0) 编辑
摘要:门面模式(Facade) 系统间耦合的复杂度 对于客户系统和子系统之前存在很多的耦合的情况,如果不考虑设计的情况,那么会形成A方案的情况,系统的依赖严重,维护性大大降低。 如果在客户层和子系统之间添加一层Facade,那么客户系统之和Facade打交道,子系统中也只和Facade打交道,那么在这时候 阅读全文
posted @ 2022-10-09 14:04 鐡道 阅读(98) 评论(0) 推荐(0) 编辑
摘要:享元模式(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) 编辑
摘要:get逻辑: HashMap数据结构为数组加链表加红黑树、只有当链表数量大于8时、才将链表转换为红黑树、时间复杂度由链表的O(N)转换为红黑树的O(logN) // 主要看getNode下的方法、传入key的hash值和key public V get(Object key) { Node<K,V> 阅读全文
posted @ 2022-08-31 14:31 鐡道 阅读(94) 评论(0) 推荐(0) 编辑

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