《HEAD_FIRST设计模式(中文版)》读书笔记
为什么看这本书?很多推荐书单上都有这本书,适合设计模式的入门。书的整体情况head first 系列的典型风格:很多啰嗦对话与无聊的图片。本书 600 多页,今天看了上午看了一个多小时,下午看了两个小时,加一起应该是 4 个小时左右看完的。书提到了这些知识模块:观察者模式 装饰者模式 工厂模式 单例模式 命令模式 适配器模式 外观模式 模版方法模式 迭代器与组合模式 状态模式 代理模式 复合模式 设计模式由来、分类及理论发展相关介绍 GoF 提到 23 种.
单例模式在开源代码中的应用
为了知道大牛是如何应用设计模式的,我喜欢扒一扒知名项目中的源码。单例模式的使用场景其实还挺简单,就是一个类只允许创建一个对象,全局共享使用这个对象。在 Java 中实现单例,需要考虑是否懒加载、是否线程安全的问题,实现方式:饿汉式、懒汉式、双重检查、静态内部类、枚举。具体实现代码开源使用实例一JDK 中java.lang.Runtime 类,每个运行中的 Java 应用的环境信息,单例。看下它的注释:* Every Java application has a si...
G2、D3 绘制维恩图
D3 绘制韦恩图示例:http://www.benfrederickson.com/venn-diagrams-with-d3.js/https://github.com/benfred/venn.js/tree/master/examplesG2 绘制韦恩图示例:https://antv-2018.alipay.com/zh-cn/g2/3.x/demo/other/venn.html效果【Java面试题与答案】整理推荐基础与语法 集合 网络编程...
不显示滚动条,仍可滚动
css 代码,#divId 为选择器#divId::-webkit-scrollbar { display: none;}【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...
工厂模式在开源代码中的应用
工厂模式,GoF 的《设计模式》中分为工厂方法和抽象工厂,如果再细一点可以加上简单工厂。下面看一下源码中的工厂模式的使用。实例一JDK 中 java.util.Calendar 类 getInstance 方法使用了简单工厂public static Calendar getInstance(){ return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));}publi.
原型模式在开源代码中的应用
原型模式是将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新对象。在 JDK 中所有类的默认父类java.lang.Object 中的 clone 方法,就实现快速地浅拷贝一个对象,当然有个前提条件,就是被克隆的对象的类需要实现 Cloneable 接口,否则会抛出异常CloneNotSupportedException。/** * Creates and returns a copy of this object. The precise meaning * of copy..
建造者模式在开源代码中的应用
建造者模式是将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。JDK 中java.lang.StringBuilder 和java.lang.StringBuffer 两个对字符串操作的类使用了建造者模式。类中的append、delete、replace、insert、deleteCharAt、appendCodePoint 方法,通过传入字符或字符串相关的参数,return this 构造对象。public StringBuilder append...
代理模式在开源代码中的应用
代理模式的作用是为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。由于静态代理会导致类文件大量增多,所以 Java 中动态代理使用的较多。案例一JDK 中的动态代理的使用,实现InvocationHandler 接口,只能代理接口的实现类package com.xiongjun.proxy.dynamicproxy;import java.lang.reflect.InvocationHandler;import..
适配器模式在开源代码中的应用
适配器模式的作用:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。开源代码中,哪些地方用到了适配器模式呢?案例一java.util.Enumeration JDK 1.0 提供用于遍历容器类的接口,但是一个公认的设计失误,所以 JDK 1.2 对其进行了重构,新增 Iterator 接口去迭代容器类。JDK 为了保证向后兼容,就在容器工具类 java.util.Collections 的enumeration 方法中使用了适配器模式..
桥接模式在开源代码中的应用
桥接模式的作用:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。案例桥接模式比较经典的应用就是 JDBC 规范和不同数据库厂商驱动的实现JDBC 中的驱动接口public interface Driver { Connection connect(String url, java.util.Properties info) throws SQLException; boolean acceptsURL(Strin.
高并发下,如何安全地修改同一行数据?
可以将数据加载到缓存中,利用 CAS 方式进行更新 也可以将所有请求放到同一个消息队列里,异步返回,按顺序执行更新注意:如果使用悲观锁,在并发请求量很大的情况下,会导致服务和数据连接数耗尽,系统卡死【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...
MySQL中如何避免死锁?
尽量以相同的顺序来访问索引记录和表 业务上能够接受幻读和不可重复读,考虑降低锁的级别到Read committed,降低死锁发生的概率 添加合理的索引,走索引避免为每一行加锁,降低死锁的概率 在事务中一次锁定所需要的所有资源,如MyISAM 引擎的表锁 避免大事务,尽量将大事务拆成多个小事务来处理 尽量避免同时并发对同一表进行读写操作,特别是执行加锁且操作数据量较大的语句 设置锁等待超时参数【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web...
Spring中ObjectFactory与BeanFactory的区别
ObjectFactory 与 BeanFactory 均提供依赖查找的能力。ObjectFactory 仅关注一个或一种类型的 Bean 依赖查找,自身不具备依赖查找的能力,能力由 BeanFactory 输出;BeanFactory 提供了单一类型、集合类型以及层次性等多种依赖查找的方式。【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL ...
Spring中BeanFactory.getBean是否线程安全?
Spring 中 BeanFactory.getBean 方法是线程安全的,执行过程中加了 synchronized 互斥锁【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...
装饰器模式在开源代码中的应用
装饰器模式的作用:动态的给对象增加一些职责,即增加其额外的功能。案例装饰器模式比较经典的应用就是 JDK 中的 java.io 包下,InputStream、OuputStream、Reader、Writer 及它们的子类。以 InputStream 为例FileInputStream 是 InputStream 的子类,用来读取文件字节流 BufferedInputStream 是 InputStream 的子类的子类,可缓存的字节流 DataInputStream 也是Inp..
外观模式在开源代码中的应用
外观模式的作用:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问,且不会暴露过多的底层实现细节。案例Tomcat 中,catalina.jar 中的 RequestFacade 和 ResponseFacade 两个类就使用了外观模式。servlet-api 中定义了HttpServlet 抽象类,类中的定义了处理 http get、post、delete... 等请求,返回处理结果,对应需要实现方法 doGet、doPost、doDelete...这些方法有两个共同..
享元模式在开源代码中的应用
享元模式的作用:运用共享技术来有效地支持大量细粒度对象的复用。案例享元模式比较经典的应用就是 JDK 中部分基本类型的包装类,缓存了一定数值范围的对象,valueOf 方法转换为包装对象时,如果值在缓存范围内,即返回缓存对象。Byte,缓存了 -128 ~ 127 Short,缓存了 -128 ~ 127 Character,缓存了 0 ~ 127 Integer,缓存了 -128 ~ 127,JVM 启动参数-XX:AutoBoxCacheMax 可以设置范围的最大值 Long..
组合模式在开源代码中的应用
组合模式的作用:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。案例一JDK 的 AWT(Abstract Window Toolkit),使用了组合模式。AWT 中包含了两种组件:容器组件和基本组件。容器组件是 java.awt.Container 的子孙类 基本组件是 java.awt.Component 的子孙类 容器组件和基本组件都是java.awt.Component 的子孙类Container 类中包含了很多基本组件或容器,放在ArrayList...
模板方法模式在开源代码中应用
模板方法的作用:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。案例一JDK 中 java.util.AbstractList 抽象集合类,用到了模板方法模式,定义了留给子类实现的 add 方法和模板方法 addAll。public abstract class AbstractList<E> extends AbstractCollection<E> implements List<.
策略模式在开源代码中应用
策略模式的作用:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。案例java.util.Comparator 接口定义元素之间的比较方法,如,有 compare 方法public interface Comparator<T> { int compare(T o1, T o2);}Arrays 工具类,指定 Comparator 进行排序public class Arrays { public stat..
今日推荐
周排行