0%

有时候一个类,可能会拥有多个变化维度。比如奶茶可以选择容量大小、口味风味。容易想到的实现方案是通过继承实现各种组合,但是这样会很容易造成类爆炸。那么有没有什么良策呢?答案就是 Bridge Pattern 桥接模式,其是结构性模式的一种,本文就让我们来了解下该模式

阅读全文 »

社会心理学只是常识吗?常识存在的一个问题是,我们在知道事实真相之后才想起它的存在。后见之明总比先见之明来得容易……实验表明,当得知实验结果时,人们便突然觉得实验结果不是那么的令人惊讶

阅读全文 »

之前我们介绍了Adapter Pattern适配器模式,通过适配器实现两个不兼容类的配合工作。而这里,我们将会介绍另外一种结构型的设计模式——Facade Pattern外观模式。有些同志会将这二者(适配器模式、外观模式)混淆,但其二者目的有着明显的区别,前者是通过包装来改变接口以达到适配的目的;后者则是通过包装简化调用、降低耦合度

阅读全文 »

前面我们介绍了一种通过包装拓展功能的方法——装饰器模式,这里我们来了解另外一种使用包装思想的设计模式——Adapter Pattern适配器模式,其依然是结构型模式的一种。一般情况下,两个类如果接口不兼容是无法一起工作的。而如果通过Adapter Pattern适配器模式就可以很好的解决这个问题了

阅读全文 »

继承是拓展类功能最常见的手段,但是其缺点也很明显,其耦合程度较高。这里我们介绍一种新的方法来拓展类的功能——Decorator Pattern装饰器模式,其是结构性模式的一种,通过包装的方式实现动态增强、拓展已有对象的功能

阅读全文 »

之前我们介绍了Factory Pattern工厂模式,其较适合于只有一种类型产品的场景。但有些时候一家工厂可能会生产多种类型的产品。比如家电厂无论海尔还是美的,都会生产冰箱、洗衣机、空调等多种不同类型的产品。这个时候,就可以应用我们这里所说的Abstract Factory Pattern抽象工厂模式

阅读全文 »

很多时候我们只是期望获取对象实例即可,并不关心实例构造过程(例如相关Field的具体如何设置)。这个时候就可以将通过工厂模式来解决这个问题,其同样也是一种创建型模式。将实例的具体构造过程进行封装以对外屏蔽,就像现实世界中我们只需从工厂直接拿取产品即可,而无需care产品在工厂里的具体制造过程

阅读全文 »

Maximum Likelihood Estimation(MLE) 极大似然估计,又被称作最大似然估计。其可在给定概率分布模型的条件下用于模型参数的估计,即所谓的参数估计

阅读全文 »

对于synchronized锁机制而言,准确来说其应该属于JVM的范畴。这里基于行文的连贯性、完整性考虑,故将该部分内容在JMM系列中一并进行介绍

阅读全文 »

多线程并发的核心问题在于如何控制同步,幸运的是Java语言原生地提供了一个同步手段——synchronized关键字。本文这里就来简单谈一谈synchronized关键字

阅读全文 »

很多编程语言中都有 volatile 关键字,但是不同语言下其语义并不完全相同。本文将就其在Java中的语义作具体说明、解释

阅读全文 »

在并发编程中,线程之间的通信是一个很关键的问题,而该问题解决方案主要可分为两大类:消息传递、共享内存。前者有以Erlang语言为代表的Actor模型,而后者中典型的则是Java语言。对于消息传递机制而言,线程之间必须通过发送消息以进行显式地通信。而同步过程则是隐式地,因为消息的发送必须在消息的接收之前;而对于共享内存机制来说,线程之间可以通过读、写内存中的公共状态来实现隐式地通信,但同步操作则需通过开发者显式地进行指定。可以看到由于Java的并发采用是共享内存机制,所以在谈多线程并发编程之前,需要对JMM(Java Memory Model)Java内存模型有一定的了解

阅读全文 »

大多数情况下,通过诸如javap等反编译工具来查看源码的字节码已经能够满足我们的日常需求,但是不排除在有些特定场景下,我们需要通过反汇编来查看相应的汇编指令。本文我们就来介绍两个很好用的工具——HSDIS、JITWatch

阅读全文 »

在并发编程中,我们大多数情况下都是显式地通过加锁来保证线程安全。这里我们来介绍一种在无锁条件下多线程变量同步的方法——CAS(Compare And Swap,比较与交换)算法

阅读全文 »

在Java开发中,多线程并发是一个永恒不变的话题与热点。这里我们开始讨论如何在开发中使用多线程实现并发

阅读全文 »