随笔分类 - 设计模式
设计模式课程 设计模式精讲 9-3 原型模式-克隆破坏单例
摘要:1 代码演练 1.1 克隆破坏单例 1.2 如何防范克隆破坏单例 1.3 小问 实体类: 测试类: 打印日志: a 单例类不实现克隆接口 b 这样修改 有哪些方式能够破坏单例模式呢? 克隆, 自己推测:序列化,反射攻击(可以翻看前边视频,后边有时间了再来巩固)
阅读全文
设计模式课程 设计模式精讲 9-2 原型模式coding
摘要:1 课堂演练 1.1 super.toString 作用 1.2 为什么要使用克隆方法呢 2 代码解析 2.1 代码解析1(使用原型模式之前) 2.2 代码解析2(使用原型模式默认方式(浅克隆)) 2.3 代码解析3(一种常用原型模式) 2.4 代码解析4(浅克隆的弊端) 2.5 代码解析5(深克隆
阅读全文
设计模式课程 设计模式精讲 9-1 原型模式讲解
摘要:1 课堂讲解 1.1 定义 1.2 类型 1.3 特点 1.4 应用场景 1.5 优点 1.6 缺点 1.7 扩展 定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 自己理解:克隆方法克隆对象 类型:创建型 不需要知道任何创建的细节,不调用构造函数。 如果要实现拷贝的方法,最好覆
阅读全文
设计模式课程 设计模式精讲 8-11 单例模式源码解析(jdk+spring+mybaties)
摘要:1 源码解析 1.1 单例解析1 1.2 单例解析2(容器单例) 1.3 单例解析3 1.4 单例解析4 java.lang.Runtime java.awt.Desktop(cs) spring中的单例是bean作用域中的一个,作用域在每个应用程序的上下文中只创建一个我们设置属性的实例, 和我们的
阅读全文
设计模式课程 设计模式精讲 8-10 单例设计模式-ThreadLocal线程单例
摘要:1 课程讲解 1.1 应用场景 2 代码演练 2.1 threadLocal应用 多线程的时候: 使用同步锁使用时间换空间的方式,(线程排队时间比较长) 而使用threadlocal使用空间换时间的方式。 基于threadlocal的单例模式,为每一个线程提供了一个对象,多线程访问的时候不会相互影响
阅读全文
设计模式课程 设计模式精讲 8-9 单例设计模式-容器单例
摘要:1 课程讲解 1.1 应用场景 2 代码演练 1.1 容器单例 1 课程讲解 1.1 应用场景 应用于在程序初始化的时候把多个单例对象放入到singletonMap中,使用的时候直接通过key获取对象。可以应用在懒汉模式中,不适用于饿汉模式(饿汉模式由于每次都要重新初始化会出现多线程安全问题) 使用
阅读全文
设计模式课程 设计模式精讲 8-8 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战
摘要:1 课堂解析 2 代码演练 2.1 枚举类单例解决序列化破坏demo 2.2 枚举类单例解决序列化破坏原理 2.3 枚举类单例解决反射攻击demo 2.4 枚举类单例解决反射攻击原理 3 jad的使用 3.1 网址: 枚举类: 测试类: 打印日志: ObjectInputStream 枚举类:(同2
阅读全文
设计模式课程 设计模式精讲 8-7 单例设计模式-反射攻击解决方案及原理分析
摘要:1 课程总结 1.1 课程总结 1.2 注意事项 2 代码演练 2.1 反射攻击(通过反射拿到单例的对象) 2.2 (应用)饿汉式防御 2.3 (应用)静态类防御 2.4 懒汉式防御1 2.5 针对懒汉式防御1反射攻击1 2.6 懒汉式防御2 2.7 针对懒汉式防御2反射攻击2 反射攻击对单例模式威
阅读全文
设计模式课程 设计模式精讲 8-6 单例设计模式-序列化破坏单例模式原理解析及解决方案
摘要:课程地址: 1 原理解析 1.1 通过反射创建对象,序列化和反序列化把单例模式破坏了 1.2 什么是序列化和反序列化 2 代码演练 2.1 序列化后的文件和源文件不是同一个对象(代码演练) 2.2 序列化后的文件和源文件不是同一个对象解决方案(代码演练) 2.3 序列化后的文件和源文件不是同一个对象
阅读全文
设计模式课程 设计模式精讲 8-5 单例设计模式-饿汉式
摘要:1 代码讲解 1.1 饿汉式不会出现多线程问题 1.2 优点和缺点 2 代码演练 2.1 代码演练1(饿汉式) 2.2 代码演练2(静态块方式实现) 刚开始加载的时候就完成了初始化,避免了线程同步问题, 优点:刚开始加载的时候就完成了初始化,避免了线程同步问题。 缺点:如果该类不经常使用,比较消耗资
阅读全文
设计模式课程 设计模式精讲 8-4 单例设计模式-静态内部类-基于类初始化的延迟加载解决方案及原理解析
摘要:1 原理解析 1.0 课程地址 1.1 如何实现让后边线程看不到前边线程是否有序列化呢(综合上节看) 1.2 原理 1.3 5种初始化方法 1.4 单例类必须要有私有构造方法 2 代码演练 2.1 代码演练1 1 原理解析 1.1 如何实现让后边线程看不到前边线程是否有重排序呢(综合上节看) 参考2
阅读全文
设计模式课程 设计模式精讲 8-3 单例设计模式-DoubleCheck双重检查实战及原理解析
摘要:1 课程讲解 1.1 为何要使用双重检查 1.2 双重检查的缺点 1.3 指令重排序讲解 1.4 指令重排序比喻(自己理解) 1.5 如何解决指令重排序问题 2 代码演练 2.1 代码演练1(双重检查 解决对象锁和类锁的问题) 2.2 代码演练2(volatile 应用:解决重排序问题) 在上节课的
阅读全文
设计模式课程 设计模式精讲 8-2 单例设计模式-懒汉式及多线程Debug实战
摘要:1 主要内容 1.1 多线程debug a 主要是在idea中,右键选择断点,选中thread,done即可。 b 使用的时候,frames选择下拉框,选择要执行的线程即可。 c 如下图所示 1.2 synchronized同步锁的调用 如2.3所示 如果锁放在静态方法上,锁的是整个class文件,
阅读全文
设计模式课程 设计模式精讲 8-1 单例模式讲解
摘要:1 课堂概述 1.1 定义 1.2 适用场景 1.3 优点 1.4 缺点 1.5 重点 1.6 实用技能 1.7 单例-相关设计模式 定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 a ◆想确保任何情况下都绝对只有一个实例 b 当一个对象需要频繁的被创建销毁的时候,并且创建或者销毁
阅读全文
设计模式课程 设计模式精讲 7-3 建造者模式源码解析(jdk+guava+spring+mybaties)
摘要:1 源码解析 1.1 jdk解析 1.2 guava解析 1.3 spring解析 1.4 mybaties解析 String StringBuilder copyOf方法 Of方法 add方法(注意静态内部类) BeanDefinitionBuilder类 SqlSessionFactoryBui
阅读全文
设计模式课程 设计模式精讲 7-2 建造者模式Coding
摘要:1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作教学课程。 重点: 教练类coach.java标红部分,builder设值,然后赋值(看test.java)。 uml类图: 测试类: 实
阅读全文
设计模式课程 设计模式精讲 7-1 建造者模式讲解
摘要:1 课堂讲解 1.1 定义 1.2 适用场景 1.3 优点 1.4 缺点 1.5 建造者模式和工厂模式的区别 ◆定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示◆用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道◆类型:创建型 ◆如果一个对象有非常复杂的
阅读全文
慕课网 设计模式课程资源
摘要:4.0.0 com.geely design_pattern war 1.0-SNAPSHOT design_pattern Maven Webapp http://maven.apache.org UTF-8 UTF-8 UTF-8 4.0.3.RELEASE...
阅读全文
设计模式课程 设计模式精讲 6-3 抽象工厂源码解析
摘要:1 源码解析 1.1 连接源码解析 1.2 mybaties 的sqlsession源码解析 Connection.java(两个方法属于同一个产品族,这是连接的父类) mysql获取的是同一产品族下的statement和同一产品族下的preparestatement oracle也是 Statem
阅读全文
设计模式课程 设计模式精讲 6-2 抽象工厂coding
摘要:1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 a 应用层代码不和具体的产品发生依赖,只和具体的产品族工厂发生依赖关系,低耦合,高内聚。 b 从具体的产品工厂取出来的肯定是同一
阅读全文