首页 > 编程语言 >Java设计思想

Java设计思想

时间:2023-08-23 21:24:01浏览次数:36  
标签:Java 思想 原则 代码 订单 模块 设计 单一 职责

Keep It Simple and Stupid
KISS原则就是保持代码可读和可维护
代码足够简单,也就意味着容易读懂,bug比较难隐藏。即便出现bug,修复也比较简单
如何写出满足 KISS 原则的代码
关于如何写出满足KISS 原则的代码,前面已经讲了一些方法,这里总结一下。
1)慎重使用过于复杂的技术来实现代码,如复杂的正则表达式、编程语言中过于高级的 语法等。
2)不要“重复造轮子”,首先考虑使用已有类库。根据作者的经验,如果自己实现类库,那么产生bug的概率更高,维护成本也更高。
3)不要过度优化。尽量避免使用一些“奇技淫巧”(如使用位运算代替算术运算、使用复杂的条件语句代替if-else等)来优化代码。


单一职责原则 (Single Responsibility Principle,SRP) 的描述:
一个类或模块只负责完成一个职责(或功能)(A class or module should have a single responsibility)。
注意,单一职责原则描述的对象有两个:类 (class) 和模块 (module)。

单一职责原则是指一个类负责完成一个职责或功能。
也就是说,我们不要设计大而全的 类,要设计粒度小、功能单一的类。
换个角度来讲,如果一个类包含两个或两个以上业务不相 干的功能,
那么我们就可以认为它的职责不够单一,应该将其拆分成多个粒度更小的功能单一 的类。
例如,某类既包含对订单的一些操作,又包含对用户的一些操作。而订单和用户是两个独
立的业务领域模型,将两个不相干的功能放到同一个类中,就违反了单一职责原则。
为了满足 单一职责原则,我们需要将这个类拆分成粒度更小的功能单一的两个类:订单类和用户类。


开闭原则 (Open Closed Principle,OCP),又称为 “对扩展开放、对修改关闭”原则。
开闭原则既是 SOLID 原则中最难理解、最难掌握的,又是最有用的。

如何理解“对扩展开放、对修改关闭”
添加一个新功能时应该是在已有代码基础上扩展代码(新增模块、 类和方法等),而非修改已有代码(修改模块、类和方法等)。
>>>多态就是对开闭原则,最好的诠释<<<
如何在代码中灵活应用开闭原则?
一:重复的代码可以抽成方法
二:重复的代码可以抽成抽象父类
二:思考是否需要定义接口(接口的使用熟练度需要时间的积累)

里氏替换原则 (Liskov Substitution Principle,LSP)
(使用父类对象的函数可以在不了解子类的情况下替换为使用子类对象)
我们将里氏替换原则描述为:
子类对象 (object of subtype/derived class)
能够替换到程序 (program) 中父类对象 (object of base/parent class)出现的任何地方,
并且保证程序原有的逻辑行为 (behavior) 不变和正确性不被破坏。

大白话就是,子类覆写父类的方法后,不应该做不符合父类方法本意的事情

接口隔离原则(Interface Segregation Principle,ISP)
接口隔离原则指导我们在设计接口时应该保持接口的粒度小、高内聚、不耦合,避免定义大而全的接口。
接口隔离原则与单一职责原则有些相似,接口隔离原则提供了一种判断接口是否职责单一的方法:


依赖反转原则主要用来指导框架的设计

举例子:
一:我们写的动物类,应不应该关心某个具体子类如Cat类的方法?不应该,因为抽象不要依赖具体实现细节
应该是Cat作为具体实现类,依赖抽象类动物类。具体实现细节依赖抽象。(继承、抽象的知识点)
二:一个Java支付系统分为 用户-->订单-->对接银行 三个模块
用户是订单的上层,用户模块需要感知订单模块的细节吗?不需要,直接调用订单模块的方法就够了
订单模块是用户模块的下层,订单模块需要感知用户模块的细节吗?需要,不然订单模块就没法拿到需要的信息
订单-->对接银行的上下层关系同理

标签:Java,思想,原则,代码,订单,模块,设计,单一,职责
From: https://www.cnblogs.com/zcj-gh/p/17652794.html

相关文章

  • 接口设计中的版本号
    今天呢,闲来无事,想到了接口设计的版本号的一些知识,特此来简单的说下API接口设计中的Version版本号。我们在接口的日常开发中,肯定都避免不了接口永成不变,那么就会出现接口变更,那么接口变更又是怎么区分的呢?接口变更又会不会对老接口有什么影响或者其他的呢,说了这么多,这就引出了一......
  • Java编码技巧
    1.常量&变量1.1.直接赋值常量值,禁止声明新对象直接赋值常量值,只是创建了一个对象引用,而这个对象引用指向常量值。反例:Longi=newLong(1L);Strings=newString("abc");正例:Longi=1L;Strings="abc";1.2.当成员变量值无需改变时,尽量定义为静态常量在类的每个对象实例中,......
  • javaScript之内置对象1
    一:概述JavaScript内置对象表示Web浏览器内部支持的对象,它们提供了很多有用的功能,让使用者可以快速实现许多功能。二:说明及其举例说明数据类型:包括Number、String、Boolean、Object、Array等,这些对象提供了用于操作基本数据类型的方法。例如,使用String对象的substring()方法可以截取......
  • Java基础
    题1:什么是自动装箱?什么是自动拆箱?自动装箱是指将基本数据类型重新转化为对象。public class Test {   public static void main(String[] args) {   Integer num = 9; }  }  num = 9的值是属于基本数据类型,原则上不能直接赋值给对象Integer。但是在JDK1.5版......
  • org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan(Lorg/apache/tomcat/
    原因<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>3.1.3</version></dependency>解决<dependency>......
  • pytestx重新定义接口框架设计
    概览脚手架:目录:用例代码:"""测试登录到下单流程,需要先启动后端服务"""test_data={"查询SKU":{"skuName":"电子书"},"添加购物车":{"skuId":123,"skuNum":......
  • Java反射介绍
    反射的概述什么是反射Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflecti......
  • 深入探索Java中的并发编程:CAS机制的原理与应用
    在当今多核处理器的时代,有效地利用多线程并发成为了现代后端开发的关键。在Java中,CAS(CompareandSwap)机制作为一种乐观锁技术,被广泛用于实现高性能的并发操作。本文将深入分析CAS机制的原理,介绍其在Java中的应用,以及在多线程环境下如何优化并发性能。CAS机制的原理CAS是一种用于实......
  • java中创建线程的三种方法以及区别
    java中创建线程的三种方法以及区别 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程下面让我们分别来看看这三种创建线程的......
  • Java基础
    一、注释单行注释//多行注释 /*我是多行注释*/文档注释Javadoc/***@Description:HelloWorld*@Author:SYL*/二、标识符和关键字    三、数据类型 浮点数是有限的离散的舍入误差大约接近但不等于的值      变量:可以变化的量每......