java 8部分读书笔记

java 8部分读书笔记

Lambda 表达式

  1. Lambda 表达式引用的是值,不是变量。

  2. Lambda 表达式中的变量只能是final类型,只能给变量赋值一次。

    1
    2
    3
    String name = getUserName();
    name = formatUesrName();
    button.addActionListener(event -> System.out.println("Hi" + name))

    如上代码将不会编译通过,name被赋值多次。

Java设计模式之适配器模式
支付系统设计(转载)

支付系统设计(转载)

支付系统

概述

支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概有几个阶段:第一阶段:支付作为一个(封闭)的、独立的应用系统,为各系统提供支付功能支持。一般来说,这个系统仅限于为公司内部的业务提供支付支持,并且和业务紧密耦合。第二阶段:支付作为一个开发的系统,为公司内外部系统、各种业务提供支付服务,支付服务本身应该是和具体的业务解耦合。

Java设计模式之装饰者模式

Java设计模式之装饰者模式

问题引入

咖啡店的类设计:

  1. 一个饮料基类,各种饮料类继承这个基类,并且计算各自的价钱。
  2. 饮料中需要加入各种调料,考虑在基类中加入一些布尔值变量代表是否加入各种调料,基类的cost()中的计算各种调料的价钱,子类覆盖cost(),并且在其中调用超类的cost(),加上特定饮料的价钱,计算出子类特定饮料的价钱。

缺点:类数量爆炸、基类加入的新功能并不适用于所有的子类、调料价钱的改变、新调料的出现都会要求改变现有代码;有的子类并不适合某些调料等情况……

Java设计模式之工厂模式

Java设计模式之工厂模式

工厂模式

序言

工厂模式在《Java与模式》中分为三类:

  1. 简单工厂模式(Simple Factory):不利于产生系列产品;

  2. 工厂方法模式(Factory Method):又称为多形性工厂;

  3. 抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;

Effective-Java-2-遇到多个构造器参数时考虑用构建器

Effective-Java-2-遇到多个构造器参数时考虑用构建器

遇到多个构造器参数时考虑用构建器

静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。当有超过20个可选域是必须的时候,对于此种情况,程序员一般考虑采用重叠构造器模式。这种模式下,提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,以此类推,最后一个构造器包含所有的参数。

Java设计模式之单例模式
leetcode-2-Add Two Numbers

leetcode-2-Add Two Numbers

Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.

  
Java设计模式之观察者模式

Java设计模式之观察者模式

定义

在阎宏博士的《JAVA与模式》一书中开头是这样描述观察者(Observer)模式的:
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

Immutable Object(不可变对象)模式

Immutable Object(不可变对象)模式

多线程下,一个对象会被多个线程共享,存在多线程并发地修改对象的属性,需要做些同步访问控制,
如显示锁,CAS操作,会带来额外的开销和问题,如上下文切换、等待时间、ABA问题。Immutable Object
模式意图通过使用对外可见的状态不可变的对象,使得天生具有线程安全性。