生成器模式的核心是当构建生成一个对象的时候,需要包含多个步骤,虽然每个步骤具体的实现不同,但是都遵循一定的流程与规则
深度解析Java多线程的内存模型
- 内部java内存模型
- 硬件层面的内存模型
- Java内存模型和硬件内存模型的联系
- 共享对象的可见性
- 资源竞速
Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操作系统,作为一个操作系统就有内存模型,这就是我们常说的JAVA内存模型。
如果我们想正确的写多线程的并行程序。理解好java内存模型在多线程下的工作方式是及其重要的,这可以帮我们更好的理解底层的工作方式。
Java动态代理与静态代理
我们先看一个简单的例子,当我们需要程序中加入方法执行的日志信息的时候,很显然我们最容易想到的实现方法,就是在方法前后插入日志记录信息。
1 | import java.util.logging.*; |
然后这种实现方式有明显的不足,这种切入式的代码(Cross-cutting),会使得HelloSpeaker拥有了本该不属于他的职责,要在hello的同时记录日志。
试想一下,如果程序中的代码到处都是这种日志需求,那么我们的就必须在到处都加上这些日志代码,想必那是很大的工作量,而且当我们需要修改密码的时候,将会变得更加复杂,维护起来变得困难,所以我们自然想到封装,由于很多对象都需要日志记录这种需求,我们何不把日志行为分离出来。
这时候就可以代理模式解决这个问题,代理又分为静态代理(Static proxy)和动态代理(Dynamic proxy)
深入理解javascript中的原型
原型prototype是javascript中极其重要的概念之一,但也是比较容易引起混淆的地方。我们需要花费一些时间和精力好好理解原型的概念,这对于我们学习javascript是必须的。
设计模式之装饰者模式Decorator_Pattern
装饰者模式可以做到在不修改任何底层代码的情况下,给对象增加的新的方法。
首先,我们通过对一个现实问题的模拟分析,了解什么是装饰者模式以及装饰者模式的作用。
设计模式之观察者模式(Observer_Pattern)
在正式介绍观察者模式前,我们先引用生活中的小例子来模拟观察者,先对观察者模式有一个整体的感觉。
现实模拟
报纸和杂志的故事。
我们看看报纸和杂志的订阅是怎么一回事:
- 报纸的任务就是出版报纸
- 我们向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来,只要你是他们的订户,你就会一直得到新报纸
- 当你们不想再看报纸的时候,向报社取消订阅,他们就不会再送报纸来,你也不会再收到报纸
- 只要报社还在运营,就会有人向他们订阅或者取消报纸
这其实就可以理解为是一种观察者模式。报社出版者被认为是观察者模式中的Subject,订阅报纸的人被认为是观察者模式中的Observer。具体的观察者模式的subject和observer我们后面会介绍。
订阅者通常有很多个,他们订阅或者取消需要通知出版者。出版者当报纸有更新时,就会把新报纸一起推送给订阅者,所有订阅者都会收到出版社的所有更新。
