【含面试题】Java 中的设计模式:单例模式的实践与实现

AIGC专栏/AI绘画教程/java面试题领取

以下是一篇符合你要求的技术博客,希望能够帮助你:

《Java 中的设计模式:单例模式的实践与实现》

设计模式是软件开发中常用的一种解决问题的方法,它们提供了一种在不改变现有代码结构的情况下重用代码的方法。在 Java 中,有许多设计模式可以使用,每种模式都有其特定的用途和优点。在本文中,我将介绍一种常用的设计模式——单例模式,并通过代码示例演示如何在 Java 中实现它。

  1. 单例模式概述

单例模式是一种创建型模式,它确保在程序运行期间,仅存在一个实例对象。这种模式通常用于创建一些需要全局访问的对象,例如日志记录器、配置管理器等。

单例模式的优点包括:

  • 减少内存消耗:由于只存在一个实例对象,因此不会浪费内存空间。

  • 提高性能:通过避免频繁创建和销毁对象,可以提高程序的性能。

  • 控制访问:单例对象通常被设计为可以被其他对象访问,但在某些情况下,可能需要限制对其的访问。单例模式可以帮助实现这种访问控制。

  1. 单例模式的实现

在 Java 中,可以使用多种方法实现单例模式。以下是其中一种常见的实现方式:

public class Singleton {
private static final Singleton instance = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
    return instance;
}

}

在上面的代码中,我们使用了一个私有构造函数来防止外部对象直接创建实例。同时,我们定义了一个静态变量 instance 来保存唯一的实例。在 getInstance() 方法中,我们返回该实例的引用。这种实现方式确保了在程序运行期间,只能存在一个实例对象。

项目实战优化我自己的代码

需求背景

当前骑手送订单之前,需要知道当前骑手送了第几单,假设当前骑手送了第i次,派单规则为第N单,则派单时派送第N-i个规则,如果i

学习代码简洁之道之前我是这样写的

   RuleDo ruleDo = new RuleDo();
        if (i <= RuleDoS.size()) {
            ruleDo = RuleDos.get(i - 1);
        } else {
            ruleDo = RuleDos.get(RuleDos.size() - 1);
        }
        if (!RiderConfigDO.getRuleRiderCode().equals(ruleDo.getRuleRiderCode()) && StringUtils.isEmpty(reason)) {
            throw new Exception("当前订单骑手派送规则已有优化,请增加配送时效或者增加接单数量");
        }

学习代码简洁之道之后:

RuleDo ruleDo = i <= RuleDoS.size() ? RuleDoS.get(i - 1) : RuleDoS.get(RuleDoS.size() - 1);
AssertUtil.assertTrue(!RiderConfigDO.getRuleRiderCode().equals(ruleDo.getRuleRiderCode()) && StringUtils.isEmpty(reason),ErrorCodeEnum.“当前订单骑手派送规则已有优化,请增加配送时效或者增加接单数量”);
当然这是代码举例,msg需要替换为内部code的~我们应该使用有意义的变量名、方法名和类名,这有利于代码的阅读和理解。我们应该遵循驼峰命名法进行命名。方法应该保持简短,通常不超过10行,只做一件事。

而对于保持优雅简洁代码,精通阿里巴巴开发手册并不是开玩笑的,从小的细节来把控开发质量是非常有必要的。

但是我觉得代码的可读性和简洁性之间存在一定的矛盾与平衡。过于追求简洁性可能会损害代码的可读性,过于追求可读性也可能导致代码变得冗长臃肿。

  1. 避免代码的过度复杂化以保证可读性,同时也避免过度 Pursue 简洁性导致代码难以理解

  2. 通过模块化设计、抽象与封装等手段隐藏代码的复杂性,同时外部提供简洁的接口

  3. 添加必要的注释来解释复杂逻辑,同时注释也要简洁明了,避免臃肿

  4. 变量、方法、类命名要简洁明了但表达完整,communicative 起来

  5. 方法要简短,遵循单一功能原则,但也要确保逻辑完整。不能过度追求方法的简洁性

kk评语:大家可以参考JavaSPI那期结合设计模式来改造我们现有的代码

总之,可读性高且设计简洁的代码,这是我们应该追求的目标。

你可能感兴趣的:(java,设计模式,单例模式)