首页 > 编程语言 >读Java8函数式编程笔记07_设计和架构的原则

读Java8函数式编程笔记07_设计和架构的原则

时间:2023-02-01 12:25:05浏览次数:42  
标签:1.6 07 代码 编程 9.4 2.1 可变性 Java8 Lambda

1. SOLID原则

1.1. 开发良好面向对象程序的准则

1.2. Liskov substitution里氏替换

1.3. Interface segregation接口隔离

1.4. Single responsibility单一功能原则

1.4.1. 程序中的类或方法只能有一个改变的理由

1.4.2. 一个类不仅要功能单一,而且还需将功能封装好

1.5. Open/closed开闭原则

1.5.1. 软件应该对扩展开放,对修改闭合

1.5.1.1. 让软件易于修改

1.5.2. 高阶函数在用多态来实现开闭原则

1.5.3. 使用不可变对象实现开闭原则

1.6. Dependency inversion依赖反转原则

1.6.1. 抽象不应依赖细节,细节应该依赖抽象

1.6.1.1. 待依赖的抽象不必是接口

1.6.2. 让程序员脱离底层粘合代码,编写上层业务逻辑代码

1.6.3. 高阶函数提供了反转控制

1.6.4. 模块化和重用方式是双向的

1.6.4.1. 可以替换不同的细节重用上层代码

1.6.4.2. 可以替换不同的业务逻辑重用细节的实现

2. 不可变性

2.1. 观测不可变性

2.1.1. 在其他对象看来,该类是不可变的

2.1.2. java.lang.String

2.1.2.1. 第一次调用hashCode方法时缓存了生成的散列值

2.1.3. 观测不可变性不意味着实现不可变性

2.2. 实现不可变性

2.2.1. 对象本身不可变

2.2.2. 实现不可变性意味着观测不可变性

3. 设计模式

3.1. 有些模式会变得过时

3.2. Lambda能让很多现有设计模式更简单、可读性更强

3.2.1. 将大量代码塞进一个方法会让可读性变差是决定如何使用Lambda表达式的黄金法则

4. 单例模式

4.1. 应该避免使用的模式

4.2. 敏捷开发使其成了一个反模式

5. 命令者模式

5.1. 命令者是一个对象,它封装了调用另一个方法的所有细节

5.2. 使用该对象,可以编写出根据运行期条件,顺序调用方法的一般化代码

5.3. 函数接口Runnable

5.4. 宏只是使用命令者模式的一个例子,它被大量用在实现组件化的图形界面系统、撤销功能、线程池、事务和向导中

5.5. 使用Lambda表达式或是方法引用,能让代码更简洁,去除了大量样板代码,让代码意图更加明显

6. 策略模式

6.1. 能在运行时改变软件的算法行为

6.2. 定义一个通用的问题,使用不同的算法来实现,然后将这些算法都封装在一个统一接口的背后

6.3. 使用Lambda表达式或者方法引用可以去掉样板代码

7. 观察者模式

7.1. 可被Lambda表达式简化和改进的行为模式

7.2. 被观察者持有一个观察者列表。当被观察者的状态发生改变,会通知观察者。

7.3. 观察者模式被大量应用于基于MVC的GUI工具中,以此让模型状态发生变化时,自动刷新视图模块,达到二者之间的解耦

8. 模板方法模式

8.1. 整体算法的设计是一个抽象类,它有一系列抽象方法,代表算法中可被定制的步骤,同时这个类中包含了一些通用代码

8.2. 算法的每一个变种由具体的类实现,它们重写了抽象方法,提供了相应的实现

8.3. 将一组方法调用按一定顺序组织起来

8.4. 如果用函数接口表示函数,用Lambda表达式或者方法引用实现这些接口,相比使用继承构建算法,就会得到极大的灵活性

8.4.1. 使用函数接口实现方法并没有排除继承的方式

9. 领域专用语言(DSL)

9.1. 针对软件系统中某特定部分的编程语言

9.1.1. 比较小巧

9.1.2. 表达能力也不如通用语言强

9.1.3. 不求面面俱到,但求有所专长

9.2. Domain-Specific Languages

9.2.1. Martin Fowler和Rebecca Parsons合著

9.2.2. Addison-Wesley出版社出版

9.3. 外部DSL

9.3.1. 脱离程序源码编写,然后单独解析和实现

9.3.2. 例如

9.3.2.1. 级联样式表(CSS)

9.3.2.2. 正则表达式

9.4. 内部DSL

9.4.1. 嵌入编写它们的编程语言中

9.4.2. 普通的类库,提供API方便使用

9.4.3. 例如

9.4.3.1. JMock

9.4.3.2. Mockito

9.4.3.3. JOOQ

9.4.3.4. Querydsl

10. 行为驱动开发(BDD)

10.1. 测试驱动开发(TDD)的一个变种

10.2. 它的重点是描述程序的行为,而非一组需要通过的单元测试

标签:1.6,07,代码,编程,9.4,2.1,可变性,Java8,Lambda
From: https://www.cnblogs.com/lying7/p/17082131.html

相关文章

  • 并发编程-Python
    目录01、理论多道技术null02、进程进程运行的三状态图同步和异步阻塞和非阻塞开启进程的两种方式进程对象的join方法进程之间数据相互隔离(默认情况下)进程对象及其他方法僵......
  • CodeForces 607B Zuma
    CF607BZumalink洛谷linkCodeForces题意Genos最近在他的手机上下载了祖玛游戏。在祖玛游戏里,存在\(n\)个一行的宝石,第\(i\)个宝石的颜色是\(C_i\)。这个游戏......
  • 并发编程
    第1章并发编程的三大挑战线程的上下切换死锁资源限制解决方法:解决上下文切换无锁并发编程Cas使用最少的线程协程避免死锁避免一个线程同时获取多把锁避免一个线程在锁内同......
  • 极客时间 Java并发编程实战 笔记
    思考、再思考、总结、再总结01可见性、原子性和有序性举几个例子先。缓存可能导致可见性问题,因为多核CPU上的多个核可能都持有同一数据的不同缓存。两个线程并行地对......
  • 1.编程初步
    程序设计基础基础知识什么是程序?为进行某项活动的步骤,计算机的程序,为得到某种结果,通过计算机语言表达的指令序列。什么是程序设计?计算思维,是运用计算机科学的基础概......
  • 07tick能见度
    importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-3,3,50)y=0.1*xplt.figure()#范围plt.xlim((-4,4))plt.ylim((-5,5))plt.xlabel('X')......
  • 学习python的编程语言
    前言那么多编程语言,为什么学python易于学习,是所有编程语言当中最容易学习的没有最好的语言,只有最合适的语言第一章python基础1.课程整体介绍python编程基础基......
  • 场景编程集锦 - 寻找最优化方案
    1.场景描述  最近由神仙姐姐刘亦菲主演的电视剧《去有风的地方》带火了一方旅游,这个地方就是云南大理沙溪,被喻为“心灵疗伤的圣地”。那里是风光秀丽,美不胜收。有湖光......
  • FLASH-CH32F203替换STM32F103 FLASH快速编程移植说明
    因CH32F203相对于STM32flash操作多了快速编程模式,该文档说明主要目的是为了方便客户在原先ST工程的基础上实现flash快速编程模式的快速移植。1、在stm32f10x.h文件......
  • FLASH-CH32F203替换CH32F103 FLASH快速编程移植说明
    因CH32F203相对于CH32F103flash操作的快速编程模式由单次128字节编程变成了单次256字节编程,该文档说明主要目的是为了方便客户在原先CH32F103工程的基础上实现flash单次......