0%

今天,我要和你说说数值计算的精度、舍入和溢出问题。之所以要单独分享数值计算,是因为很多时候我们习惯的或者说认为理所当然的计算,在计算器或计算机看来并不是那么回事儿。就比如前段时间爆出的一条新闻,说是手机计算器把 10%+10% 算成了 0.11 而不是 0.2。

阅读全文 »

Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Java Persistence API (JPA) 等事务 API,实现了一致的编程模型,而 Spring 的声明式事务功能更是提供了极其方便的事务配置方式,配合 Spring Boot 的自动配置,大多数 Spring Boot 项目只需要在方法上标记 @Transactional 注解,即可一键开启方法的事务性配置。

阅读全文 »

Tom 商店-基于策略模式实现订单创建 一文中我们介绍了基于策略模式来实现不同类型的订单创建流程。同样,不同类型的订单的取消逻辑也有所不同,而对于取消订单的公共逻辑部分我们则抽取到抽象类中实现,对于具体的取消逻辑则有各自的子类去实现,这里我们使用了模板方法模式实现。为了流程的连贯,我们这里同时也使用到了策略模式实现动态切换不同类型的取消订单实现类。

阅读全文 »

关于分布式事务,网上有很多相应的解决方案,下面我们介绍一下在 Tom 项目中使用的一种解决方案,其不依赖第三方框架,并采用异步补偿回滚的方式保证事务的一致性,具体流程如下图所示。

阅读全文 »

在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。

阅读全文 »

今天,我们再来学习另外一个比较常用的创建型设计模式,Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。

实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢?建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢?

话不多说,带着上面两个问题,让我们开始今天的学习吧!

阅读全文 »

一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。所以,我们今天讲解的重点是前两种工厂模式。对于抽象工厂,你稍微了解一下即可。

阅读全文 »