一工厂模式 1.1工厂模式定义 工厂模式包括简单工厂、工厂方法和抽象工厂三个部分。其中,简单工厂可以看作工厂方法的一种特例形式。 1.2工厂模式的作用 将类的创建与类的使用分离,职责单一,减少代码的复杂度,降低代码的耦合性,增加代码的可读性和可扩展性。 1.封装变化。如果逻辑有可能变化,封装成工厂类之后,创建逻辑的变更不会影响调用者。 2.代码复用。创建代码抽离到单独的工厂类之后可以复用。 3.隔离复杂性。封装复杂的创建逻辑,调用者无需知道对象是如何创建的。 4.控制复杂度。将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。 1.3工厂模式的经典实现 简单工厂 java ...
一观察者模式 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 1.1涉及到的角色分别为 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删...
最佳答案:
java.io.IOException:Brokenpipe是因为前端请求后端时,后端返回超时;前端请求断开,后端返回时发现连接断开了,无法找到输出位置报出的错误。 解决方案: 1、前端延长超时提醒时间 2、优化后端处理时间
Redis的消息队列不是专业的消息队列,它没有非常多的高级特性,没有ack保证,如果对消息的可靠性有着极致的追求,那么它就不适合使用。 异步消息队列 -- Redis的list(列表)数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列,使用lpop和rpop来出队列。 rpushnotify-queueapplebananapear (integer)3 llennotify-queue (integer)3 lpopnotify-queue "apple" llennotify-queue (integer)2 lpopnotify-queue "banana"...
Java8新特性简介 速度更快 代码更少(增加了新的语法:Lambda表达式) 强大的StreamAPI 便于并行 最大化减少空指针异常:Optional Nashorn引擎,允许在JVM上运行JS应用 为什么使用Lambda表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升 从匿名类到Lambda的转换举例1 ![image...
什么是函数式(Functional)接口 只包含一个抽象方法的接口,称为函数式接口。 你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。 我们可以在一个接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口。同时javadoc也会包含一条声明,说明这个接口是一个函数式接口。 在java.util.function包下定义了Java8的丰富的函数式接口 ...
方法引用(MethodReferences) 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用! 方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。 要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致! 格式:使用操作符“::”将类(或对象)与方法名分隔开来。 如下三种主要使用情况: 1. 对象::实例方法名 2. 类::静态方法名 3. 类::实例方法名 例如: Consumer...
StreamAPI说明 Java8中有两大最为重要的改变。第一个是Lambda表达式;另外一个则是StreamAPI。 StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为StreamAPI可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操...
到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到GoogleGuava的启发,Optional类已经成为Java8类库的一部分。 Optional<T类(java.util.Optional)是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。 Optional类的J...