03 2020 档案
摘要:结构设计模式向您展示了如何以灵活和可扩展的方式将系统的不同部分粘合在一起。它们可以帮助您保证当其中一个部分发生更改时,整个结构不需要更改。这些模式关注的是类之间如何相互继承,以及它们是如何由其他类组成的。结构模式使用继承来组合接口或实现。 适配器模式 适配器模式(Adapter Pattern)是作
阅读全文
摘要:行为设计模式是识别对象之间的通信模式,行为模式涉及对象之间的责任分配,或者,将行为封装在对象中并将请求委托给它,也就是对象之间的关系。 涉及:* 状态模式中介模式* 观察者模式备忘录模式迭代器模式命令模式* 策略模式* 模板模式* 访客模式示例责任链模式 观察者模式 根据GoF定义,observer
阅读全文
摘要:行为设计模式是识别对象之间的通信模式,行为模式涉及对象之间的责任分配,或者,将行为封装在对象中并将请求委托给它,也就是对象之间的关系。 涉及: 状态模式 * 中介模式 观察者模式 * 备忘录模式 * 迭代器模式 * 命令模式 策略模式 模板模式 访客模式示例 * 责任链模式 责任链模式 责任链模式(
阅读全文
摘要:单例模式 懒汉式,线程不安全。 除非是单线程程序,否则不推荐使用。 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstan
阅读全文
摘要:10.1 Rename Method(函数改名) 10.2 Add Parameter(添加参数) 10.3 Remove Parameter(移除参数) 10.4 Separate Query from Modifier(将查询函数和修改函数分离) 10.5 Parameterize Method
阅读全文
摘要:9.1 Decompose Conditional(分解条件表达式) 9.2 Consolidate Conditional Expression(合并条件表达式) 9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 9.4 Remo
阅读全文
摘要:重构-改善既有代码的设计完整笔记系列之8 - 重组数据 8.1 Self Encapsulate Field(自封装字段) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将值对象改为引用对象) 8
阅读全文
摘要:目录 6.1 Extract Method(提炼函数) 6.2 Inline Method(内联函数) 6.3 Inline Temp(内联临时变量) 6.4 Replace Temp with Query(以查询取代临时变量) 6.5 Introduce Explaining Variable(引
阅读全文
摘要:主题: 线程的未捕获异常 线程工厂 线程暂停 线程池 线程的未捕获异常 在线程异常的时候,多线程运行不能按照顺序执行过程中捕获异常的方式来处理异常,异常会被直接抛出到控制台(由于线程的本质,使得你不能捕获从线程中逃逸的异常。一旦异常逃逸出任务的run方法,它就会向外传播到控制台,除非你采用特殊的形式
阅读全文
摘要:由资源稀缺性或者程序自身的问题和缺陷导致线程一直处于非Runnable状态,或者线程虽然处于Runnable状态但是其要执行的任务却一直无法进展的故障现象。 有4种情况 死锁 锁死 饥饿 活锁 死锁 如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情
阅读全文
摘要:本章探讨线程安全的java平台本身的机制,免于基于同步(内部锁)或显式锁的实现,可以简化开发,避免锁造成的各种问题和开销。 无状态对象 不可变对象 ThreadLoacl线程特有对象 线程安全并发集合 无状态对象 无状态对象,就是没有实例变量的对象.不能保存数据,是线程安全的。 比如以下方法中的变量
阅读全文
摘要:wait(),notify()和notifyAll() 他们都是java.lang.Object的方法: wait(): Causes the current thread to wait until another thread invokes the notify() method or the
阅读全文
摘要:多线程的一个接口和一个类 //Runnable接口: @FunctionalInterface public interface Runnable { public abstract void run(); } //Thread类,它其实也是实现了Runnable接口 public class Th
阅读全文
摘要:在多任务程序中,我们比较熟悉的是分支-合并框架的并行计算,他的目的是将一个操作(比如巨大的List计算)切分为多个子操作,充分利用CPU的多核,甚至多个机器集群,并行执行这些子操作。 而CompletableFuture的目标是并发(执行多个操作),而非并行,是利用CPU的核,使其持续忙碌,达成最大
阅读全文
摘要:Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)。是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。在这段代码就可能产生空异常; String isocode = user.getAddress().getCoun
阅读全文
摘要:得益于函数接口,我们可以改造设计模式(不限于此): 策略模式 模板模式 观察者模式 责任链模式 工厂模式 策略模式 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。 缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 使用场景: 1、如果在一个系统里面有许多类,它
阅读全文
摘要:问题引入 如果你在做一些汇总操作,比如 1、对一个交易列表按货币分组,获取每种货币的和(Map<Cruuency,Integer>) 2、将交易分成贵的、不贵的(Map<Boolean,List<Transaction>>) 3、多级分组,按城市分组,再按贵和不贵分组 如果是传统的写法,使用外部迭代
阅读全文
摘要:问题引入 假如你是一个厨师,你有一份菜单列表(DishMenu),你需要一份低卡路里(Caloric低于400),并且按卡路里数值排序的top3(最低的前3个)的仅包含菜名的菜单列表,你会怎么做?这个问题也贯穿了开发中大量需要处理list、set、map之类的集合操作,是非常非常基础的问题。而Str
阅读全文