函数式编程
文章平均质量分 66
mmmmPccPcc
学习技术
展开
-
Scala实现访问者模式
目的以某种方式对在数据结构上操作进行封装,进而在不修改原有数据结构的前提下为该数据结构添加新的操作。概述对于一个长期运行的程序而言,一个焦点是如何对数据结构进行扩展。而这个扩展有两个维度:新操作与新实现。一般来说,我们希望在不重新编译源代码,甚至不访问源代码的情况下完成对数据结构的扩展。在Java中,Collection作为一个通用的集合接口,定义了很多方法和操作,同时也有很多实现类。在面向对象的语言中,我们可以实现接口为Collection添加新的实现。如果要为Collection添加新的原创 2021-03-02 16:00:44 · 120 阅读 · 0 评论 -
装饰器模式与静态代理模式
概述当我们需要向一个既有的类添加一些行为,但无法对该类进行修改时,装饰器模式,又称包装器(Wrapper),将会派上用场。总而言之,装饰器模式就是在不改变类的前提下,给类之前的行为添加新的功能。装饰器模式结合了继承和组合。它需要具体的类实现了一个行为接口,而这个具体的类(ConcreteClass)和被实现的接口(Interface)将被我们用来实现装饰类(Decorator)。如下图所示 目的装...原创 2021-03-02 13:41:40 · 610 阅读 · 0 评论 -
Scala的null/空对象
引言在Java中,我们通常用一个null来表示引用的缺失。但是,这样的做法会在代码里产生大量的判空逻辑://常用的判空逻辑if(null == someObejct){ ... ...}else { ... ...}这种null对象的使用,会导致项目里散落着大量如上的代码,加大了代码量的同时,一旦我们忘记了对null的处理,就会导致整个程序的崩溃。所以,null对象一直是Java程序员不得不面对的琐事,而常见的解决方案,如单例对象(这样功能的对象可以在此处简称原创 2021-03-01 20:48:35 · 3890 阅读 · 0 评论 -
Scala函数闭包
对于函数闭包,可以结合面向对象来理解:一个函数体就是一个对象 函数体里的函数就是对象的行为 函数体里的一个字段被多个函数引用,一个对象里的属性会被多个行为改变 函数体里的字段可以是函数,一个对象的行为可以被外界引用下面是Scala的一个函数闭包object FuncTest extends App { var results = count def count: List[() => Int] = { var list = List[() => Int]()原创 2021-02-26 17:01:36 · 150 阅读 · 0 评论 -
Scala高阶函数实现面向对象的行为模式
高阶函数实现传统的策略模式摘 要:从Java的传统策略模式(Strategy Pattern)出发,对比Scala的面向函数编程实现的策略模式。关键词:设计模式;Java;Scala1策略模式 策略模式,顾名思义就是类的行为上的策略,或是不同算法的使用策略。大体的理解就是随着情况的变化来选择不同的策略,对比于硬编码(多重条件转移语句)的分支实现,策略模式符合开闭原则。 策略模式主要由三部组成:策略接口(Strategy),具体策略(Concrete Strategy...原创 2021-02-26 13:02:29 · 245 阅读 · 0 评论