首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏深入浅出Java

    掌握8方法设计规则,设计优雅健壮的Java方法

    掌握8方法设计规则,设计优雅健壮的Java方法一个良好的方法设计可以提高代码的可读性、可维护性和可扩展性,而糟糕的方法设计则可能导致代码难以理解和修改本文基于 Effective Java 方法章节总结 8设计方法的规则,帮助开发者更好进行方法设计检查参数的有效性为了防止错误发生,方法中一般会对参数进行校验,比如ArrayList的构造和添加方法传入容量为负数会抛出非法参数异常IllegalArgumentExceptionpublic ,但是这样可能存在频繁创建对象的性能问题如果调用方是可信任的(不会修改逃逸的可变对象),那么也可以不进行保护性拷贝(在文档中说明)谨慎设计方法1.谨慎选择方法的名称见名知意2.不要过于追求提供便利的方法设计 ,而返回null会导致调用方未判空从而出现空指针异常当然调用方也可以规范使用空集合判空工具类如CollectionUtils.isNotEmpty()谨慎使用OptionalOptional作为JDK8中提供处理非空判断的 (入参、响应)解决设计方法时需要见名知意、避免参数过长、定义参数类型为接口而不是类、boolean类型考虑泛型,并且API中不要追求大量便利的方法,这种方法应该在工具类中重载编译时就能够确定,为了避免转换类型调用错重载方法

    42721编辑于 2024-07-30
  • 来自专栏软件方法

    软件方法(下)分析和设计8

    思考的方法,也就是知识分离的方法,包括域和域之间的知识分离,以及域内部的知识分离。 *调查:您看过的以“领域驱动设计”为名的文章,里面有几个领域类?欢迎在本文下留言。 图8-11 来自PC Magazine 1990年1月30日刊的截图(被圈住的内容说明了工具的数量) 1980年代后期,面向对象的思想开始用于分析和设计。然后,UML统一了表示法。 展示的就是打着“领域驱动设计”旗号的伪创新之一:事件风暴(EventStorming)。 ? 事实上,一旦付出努力,咬咬牙掌握了更严谨和更高效的方法,是羞于再回头去使用那些打着“敏捷”或“领域驱动设计”旗号的伪创新的。 8.1.8 本书使用的分析方法

    51520发布于 2021-04-22
  • 来自专栏软件方法

    软件方法(下)分析和设计8章连载

    事实上,一旦付出努力,咬咬牙掌握了更严谨和更高效的方法,是羞于再回头去使用那些打着“敏捷”或“领域驱动设计”旗号的伪创新的。 8.1.8 本书使用的分析方法 分析模型描述系统要封装的核心域知识。 我们试图制作一款以《软件方法》所述方法学为核心的建模工具。 《软件方法》所叙述的方法学挑选了一些元素来表示模型,如图8-23。 ? 也就是说,我们把《软件方法》的知识作为核心域,制作一款封装《软件方法》知识的工具。可以这样说,在下册学习分析设计技能的过程中,我们不仅可以学习建模,还可以学习到对建模的建模。 例如,《软件方法》第2章讲述了愿景以及思考愿景的方法,一些内容截图如图8-25。 ? ? ? 图8-25 《软件方法》第2章截图 对以上知识建模,可能会得到图8-26这样的类图: ? 图8-31 虚的"对象空间" 以上内容可以用来判断你思考的问题是分析问题还是设计问题。

    1.1K30发布于 2021-06-10
  • 来自专栏第三方工具

    Java设计模式8

    Java设计模式8种 1.模板模式 2.建造者模式 3.装饰器模式 4.工厂模式 5.策略模式 6.代理模式 7.单例模式 8.观察者模式 ------------------------ DEMO - ----------------------- 1.模板模式 package com.example.core.mydemo.java3.model; /** *模板方法模式定义一个算法的骨架,把具体的实现留给子类 * * JDK 中的应用: * 动态代理 java.lang.reflect.Proxy * RMI(远程方法调用) * * Spring 中的应用: * AOP(面向切面编程)广泛使用代理模式 Singleton obj2 = Singleton.getInstance(); System.out.println(obj2.toString()); } } 8.

    33110编辑于 2025-03-05
  • 【JDK8 新特性2】JDK 8 接口默认方法静态方法

    2.2 接口静态方法的使用 3、接口默认方法和静态方法的区别 ---- JDK 8以前的接口: interface 接口名 { 静态常量; 抽象方法; } JDK 8对接口的增强 ,接口还可以有默认方法和静态方法 JDK 8的接口: interface 接口名 { 静态常量; 抽象方法; 默认方法; 静态方法; } 1、接口默认方法 在 JDK 8以前接口中只能有抽象方法。 因此,在JDK 8时为接口新增了默认方法,效果如下: 接口中的默认方法实现类不必重写,可以直接使用,实现类也可以根据需要重写。 这样就方便接口的扩展。 实现类直接调用接口默认方法 定义接口默认方法: 测试类编写代码: 1.2.2 实现类重写接口默认方法 2、接口静态方法 为了方便接口扩展,JDK 8为接口新增了静态方法

    51420编辑于 2022-11-07
  • 来自专栏Lixj's Blog

    设计模式】模板方法设计模式

    定义 模板方法设计模式的定义如下: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 钩子就是在整体流程的设计中,故意留下的供子类灵活变更的钥匙。 钩子是一种被声明在抽象类中的方法,但钩子只有空的或者默认方法实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。 但如果遇到适合的场景,使用这种设计模式也非常方便,因为可以控制整套逻辑的执行顺序和统一的输入、输出,而对于实现方,只需要关心自己的业务逻辑即可。 另外,模板模式也是为了解决子类通用方法,放到父类中优化设计。让每一个子类只做子类需要完成的内容,而不需要关心其他逻辑。再提取公用代码,行为由父类管理,扩展可变部分,也就非常有利于开发拓展和迭代了。 Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/设计模式-模板方法设计模式

    84710编辑于 2022-06-10
  • 来自专栏小工匠聊架构

    Java 8 - 05 方法引用

    方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下比起使用Lambda表达式, 更易读 。上面的栗子就是借助了Java 8 API ,用方法引用写的一个排序的例子。 ---- 方法引用 方法引用可以被看作仅仅调用特定方法的Lambda的一种快捷写法。 当你需要使用方法引用时,目标引用放在分隔符 :: 前,方法的名称放在后面 Enginner::getJob 就是引用了 Enginner类中定义的方法 getJob 。 ---- 如何构建方法引用 方法引用主要有三类。 ,来确定对于给定的函数式接口,这个方法引用是否有效:方法引用的签名必须和上下文类型匹配 来个小测验吧 测验:方法引用 下列Lambda表达式的等效方法引用是什么?

    65320发布于 2021-08-17
  • 来自专栏Java旅途

    Java8——方法引用

    方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式。那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用。 一、方法引用的三种语法格式 1. 0 : 1); } } 注意:被调用的方法的参数列表和返回值类型需要与函数式接口中抽象方法的参数列表和返回值类型要一致。 3. 写法: @Test void test7(){ Supplier<Person> supplier = ()->new Person(); } 构造器应用写法: @Test void test8( lamdba的另一种表现形式 方法引用被调用的方法的参数列表和返回值类型需要与函数式接口中抽象方法的参数列表和返回值类型要一致 方法引用中使用类::实例方法的条件是第一个参数是这个实例方法的调用者,第二个参数是这个实例方法的参数

    99450发布于 2020-07-13
  • 来自专栏烟草的香味

    Java8 方法引用

    概述 方法引用是用来直接访问类或实例阴茎存在的方法或者构造方法.它需要由兼容的函数式接口(lambda表达式中用到的接口)构成的目标类型上下文. 关于lambda表达式可以看这篇文章Java8 Lambda表达式 当lambda表达式只是执行一个方法调用时, 直接通过方法引用的形式调用. 方法引用是一种更简洁的lambda表达式. 可以看出来, 方法引用就是用已经实现的方法来实现lambda表达式中的实现, 所以引用的方法要满足以下要求: 引用的方法的参数列表必须与实现的抽象方法参数列表保持一致. 方法引用的语法为: 类或对象名::方法名或new 通过引用即可引用指定类或对象的指定方法 分类 下面介绍以下几种不同的方法引用. 1.静态方法引用 顾名思义, 静态方法引用就是引用类的静态方法, 语法为 2.实例方法引用 顾名思义,实例方法引用就是引用对象实例的方法, 语法为: 对象实例::方法方法引用与lambda表达式: String str = "aaaaaaaaaaa"; // 若实例方法要通过对象来调用

    68420发布于 2019-07-25
  • 来自专栏python3

    #8 Python数学方法

    In [116]: complex(5,8) Out[116]: (5+8j) # complex(实部,虚部),虚部可以省略 创建复数 ? ? In [139]: chr(56) Out[139]: '8' # 这里涉及ASC码的内容 整数转换为字符 ? ? In [142]: ord('8') Out[142]: 56 # 这里涉及ASC码的内容 字符转换为整数 ? ? ,并且二者方法基本上一样,接下来,以math模块为例,详细的介绍其包含的方法 想要查看模块里面具体方法的帮助信息时,可以用 help() 函数查看: In [173]: help(math.exp) 注意:查看具体方法时,只写方法名称即可,不要加括号,否则会报错!

    83420发布于 2020-01-17
  • 来自专栏Java旅途

    Java8——方法引用

    方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式。那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用。 一、方法引用的三种语法格式 1. Test 2void test7(){ 3 Supplier<Person> supplier = ()->new Person(); 4} 构造器应用写法: 1@Test 2void test8( serialVersionUID = -7008474395345458049L; 4 5 private String name; 6 private int age; 7 8 lamdba的另一种表现形式 方法引用被调用的方法的参数列表和返回值类型需要与函数式接口中抽象方法的参数列表和返回值类型要一致 方法引用中使用类::实例方法的条件是第一个参数是这个实例方法的调用者,第二个参数是这个实例方法的参数

    57230发布于 2020-07-16
  • 来自专栏烟草的香味

    Java8 默认方法

    概述 Java8新增了接口的默认方法。使用default关键字。 默认方法就是接口可以有实现方法,而且不需要实现类来实现其方法。相对于JDK1.8之前的接口来说,新增了可以接口中实现方法。 可以说在接口中实现方法一部分原因是为了lambda表达式服务的,因为lambda表达式只能交给接口。 分类 语法 ? 多个默认方法 因为接口中有了默认方法,一个类又可以实现多个接口,难免会碰到相同名称的方法,当一个类实现多个接口,多个接口中存在同名的default方法,就需要子类重新实现,避免二义性 ? 静态默认方法 Java8的接口可以生命静态方法,并且可以提供实现。 ?

    59720发布于 2019-07-25
  • 来自专栏CSDN旧文

    设计模式』设计模式--模板方法模式

    模板方法模式是基于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心。 模板方法的本质:抽象封装流程,具体进行实现 模版方法模式需要开发抽象类和具体子类的设计师之间的协作。 一个设计师负责给出一个算法的轮廓和骨架 另一些设计师则负责给出这个算法的各个逻辑步骤。 代表这些具体逻辑步骤的方法称做基本方法(primitive method) 将这些基本方法总汇起来的方法叫做模版方法(template method),这个设计模式的名字就是从此而来。 多个子类有公有的方法,并且逻辑基本相同时; 重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现; 重构时,模板方法模式 是一个经常使用的模式,把相同的代码抽取到父类,然后通过钩子函数约束其行为 最后,设计模式给出的是一种设计框架,而不是条条框框,你需要用的是他真正优秀的地方! 开发实例 ?

    1.5K20发布于 2020-10-28
  • 来自专栏everhad

    设计模式:模板方法

    模板方法 使用基类定义整体步骤,即若干方法的调用过程,将一些可变的步骤由子类去重写。这样就可以利用多态在不改变操作的整体结构下定制一些特殊细节。 代码解释 可以联想在线电子邮件和普通邮递的区别。 on**()方法,目标方法在调用子类重写的方法时通常做了很多额外准备工作和后续工作。 dirtyOpaque) onDraw(canvas); ... } ViewGroup事件分发 ViewGroup在方法dispatchTouchEvent()中定义了事件分发机制的整体结构。 子类需要重写以下方法来定制事件处理过程: public boolean onInterceptTouchEvent(MotionEvent ev); public boolean onTouchEvent 模板方法强调抽象过程的不变性,某些细节的可变性。

    80650发布于 2018-01-08
  • 来自专栏C/C++基础

    算法设计方法

    2.算法的常用设计方法 实际应用的算法千变万化,种类繁多。设计一个好的算法需要设计者根据实际要解决的问题,充分发挥自己的分析和综合能力,经过认真构思、仔细设计和耐心调整。 在算法的设计过程中,最重要的是创新精神。经过数千年无数前人的创新,人类不近积累了大量精妙的算法,同时在算法的设计方法上也进行了深入的探讨,发现许多不同问题的解决算法,它们的设计思想有相似之处。 经过科学的总结,找到了一些行之有效的能够用于设计算法的一般方法。下面列举最常用的算法设计方法。 2.3递归法 递归(Recursion)是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。 如迷宫问题和八皇后问题都可以采用回溯方法设计求解算法。

    95830发布于 2018-08-03
  • 来自专栏C++

    设计模式-模版方法

    什么是模版方法? 借助抽象类定义算法的骨架,再由具体子类实现算法的特定步骤。 这种设计模式让算法的整体结构得以固定,同时又能让不同的子类灵活地实现具体步骤; 简单来说就是使用抽象类,把要实现的功能框架写好,里面的具体实现细节设置为虚函数; 怎么理解抽象类的算法骨架? 首先我们要知道什么是抽象类,抽象类就是还有纯虚函数的类就叫做抽象类,抽象类是不可以实例化的,这也是抽象类作为模版的重要原因; 我们在抽象类中定义的纯虚函数,后面再继承的派生类中都是需要进行重写的,这算是模版方法的使用方法 ; Burn功能骨架 这里我以一个游戏中常见的角色类为例; #include<bits/stdc++.h> using namespace std; //模版方法--抽象类 class Factor ,骨架是一样的,但是里面的内容是不一样的,不同的对象可以从过重写骨架中的接口和方法,实现不同的效果,这就是多态的应用!!!

    22610编辑于 2025-04-09
  • 来自专栏憧憬博客分享

    设计模式 | 模版方法

    说明 模板方法是通过汇总 或排序基本方法而产生的结果集。 模板方法在一些开源框架中应用很多,它提供了一个抽象类,然后开源 框架写了一堆子类,在《XXX In Action》中就说明了,如果你需要扩展功能,可以继承了这个抽象类,然 后修改 protected 方法 父类调用子类的静态方法。 这三种都是父类直接调用子类的方法,好用不?好用!解决问题了吗?解决了!项目中允许使用不? 不允许! 其实这个问题可以换个角度去理解,在重写了父类部分方法后,再调用从父类继承的方法,产生 不同的结果(而这正是模板方法模式),这是不是也可以理解为父类调用了子类的方法呢? 你修改了子类, 影响了父类的结果,模板方法模式就是这样效果。 示例 // 别想了 这个设计过于简单 正常编码就能编写 别看啥例子了 要看再百度一下子

    56120发布于 2020-07-21
  • 来自专栏不蜇人的小蜜蜂

    设计模式---模板方法

    ; 3、然后是具体的类,XXXDisplay继承自AbstractDisplay,并去重写父类方法等 通常在第2步时发现,虽然当前类为一个抽象类,但是里面却有部分的有方法体的方法(可能被final修时, 也可能没有被final修时),并且这些方法体内部调用了抽象方法。 具有这种特征的模式即为模板方法。 显而易见,抽象类中定义了模板方法,但又需要子类自己的逻辑去配合父类的模板方法才能完成最终的方法调用。 ||||||||||||| 正如示例代码所示: 1、父类(抽象类)定义了抽象方法和模板方法 2、子类实现抽象方法 3、在执行父类的模板方法的时候发现,具体的逻辑会根据具体的子类型来确定。 这就 实现了一个模板算法下的不同的实现内容 到此大家应该也对模板方法有了个大概的认识,下面我们来总结一下模板方法的重要特征(敲黑板): 1、关于模板方法Template Method的角色划分:抽象类和具象子类

    50020发布于 2020-03-31
  • 来自专栏问答设计模式

    设计模式——模板方法

    菜鸟:大家伙儿常说的模板方法是什么? 码农:设计模式的经典名著中Design Patterns: Elements of Reusable Object-Oriented Software(《设计模式——可复用面向对象软件的基础》)提出的一种软件编码思想模式 菜鸟:这跟模板方法有什么关系? 码农:模板方法就是来解决这个问题的;将完成一件事情的稳定和变化独立开来,定义好一个操作的算法骨架(稳定),而将一些步骤延迟到具体场景中实现(变化);模板方法使得不同场景复用同一个算法框架,具体的场景重定义算法的某些特定步骤 / 上层应用逻辑程序代码class application : public library {public:application(){}virtual ~application(){}//重写父类方法

    45430编辑于 2022-09-03
  • 来自专栏Python机器学习算法说书人

    Python设计模式(8):外观模式

    客户类直接调用该外观类的方法即可,而不必关心这些方法对其他类的调用的内部细节。 在 Java 语言中,JDBC 是一个众所周知的典型的外观类,它为用户(程序员)提供了所有关于数据库连接和访问的功能。 外观模式的概念 这样的基本思想也可以被普遍应用到软件设计中。例如,在类库中有多个类 Class1,Class2,……,Class12 等。客户类 Client 要调用这些类中的方法。 此时,可以编写一个外观类 Facade,将项目所需要的功能都封装在这个类中,这样,程序员只需要调用这个门面类提供的方法即可完成编程任务。 如图所示的设计类图即为外观模式设计类图。 print('Class6') class Class7: def __init__(self): print('Class7') class Class8: def __init__(self): print('Class8') class Class9: def __init__(self): print

    59620发布于 2019-07-26
领券