Java设计模式详解:单例与工厂模式
需积分: 36 63 浏览量
更新于2024-07-16
1
收藏 1.14MB PDF 举报
"Java架构师最新知识要点.pdf"
在Java架构师的学习旅程中,了解和掌握设计模式是非常关键的一部分。本资源中提到了两种重要的设计模式:单例模式和工厂模式。
1. 单例模式(Singleton Pattern)
单例模式是一种创建型设计模式,其主要目标是确保一个类只有一个实例,并提供全局唯一的访问点。在Java中,实现单例模式通常有两种方式:饿汉式和懒汉式。通用代码示例采用的是饿汉式,它在类加载时就完成了初始化,因此是线程安全的。代码如下:
```java
public class Singleton {
private static final Singleton singleton = new Singleton();
// 防止外部直接创建对象
private Singleton() {}
// 获取唯一实例的方法
public static Singleton getSingleton() {
return singleton;
}
// 其他静态方法
public static void doSomething() {}
}
```
在某些特定场景下,如需要生成唯一的序列号、共享访问点或共享数据(如计数器)、创建对象成本过高(如涉及大量IO或数据库操作),以及需要定义静态常量和静态方法的工具类,单例模式都是理想的选择。然而,未加锁的懒汉式单例在多线程环境下可能存在并发问题,可以通过添加`synchronized`关键字来解决,或者使用双重检查锁定(DCL)实现更高效的安全单例。
2. 工厂模式
工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法让类的实例化延迟到子类进行。这种模式可以分为简单工厂、工厂方法和抽象工厂三种形式。下面是一个简单的工厂模式示例:
```java
// 定义产品接口
public interface Product {
void doSomething();
}
// 创建具体产品类
public class ConcreteProduct1 implements Product {
@Override
public void doSomething() {
System.out.println("ConcreteProduct1 doing something...");
}
}
public class ConcreteProduct2 implements Product {
@Override
public void doSomething() {
System.out.println("ConcreteProduct2 doing something...");
}
}
// 定义工厂接口
public interface Factory {
Product createProduct();
}
// 实现工厂接口的具体工厂类
public class ConcreteFactory1 implements Factory {
@Override
public Product createProduct() {
return new ConcreteProduct1();
}
}
public class ConcreteFactory2 implements Factory {
@Override
public Product createProduct() {
return new ConcreteProduct2();
}
}
```
通过工厂模式,我们可以将对象的创建与对象的使用分离,提高代码的可扩展性和可维护性。当需要创建的对象种类繁多,或者需要根据不同的条件动态选择创建哪种类型的对象时,工厂模式尤为适用。
综上,对于Java架构师来说,熟练运用这些设计模式能提升代码质量,简化系统结构,增强软件的灵活性和可维护性。不断学习和实践这些模式,将是提升个人技能的关键步骤。
109 浏览量
2022-06-04 上传
2021-11-30 上传
360 浏览量
148 浏览量
2021-11-20 上传
星辰引路-Lefan
- 粉丝: 931
- 资源: 130
最新资源
- minishift-demo:使用minishift进行本地开发的演示
- 初级java笔试题-awesome-stars:由stargazed整理的我的GitHub星星列表
- docker-plex:Ubuntu Groovy上的Plex
- jdk1.8.0_241.zip
- 商品管理
- Homitech
- DuckCreekAutomation:DuckCreekAutomation
- 首尔大卖场观感:从顾客需求出发提升服务
- prelude-ls:prelude.ls是一个面向功能的实用程序库-功能强大且灵活,几乎所有功能都可以使用。 它是用http编写的,并且是http的推荐基础库
- java笔试题算法-lbfgsb_wrapper:FortranL-BFGS-B算法的Java包装器
- JavaScriptViewEngine-master.zip
- 2019 5G+智能工厂网络及应用白皮书精品报告2020.rar
- malves0
- 销售点管理系统简介——卖场管理
- Công Cụ Đặt Hàng Của Vận Tải Hoa Kiều-crx插件
- gdblib:Go库,用于使用MI接口与gdb调试器接口