23种设计模式,原型模式的概念优缺点以及JAVA代码举例

简介: 【4月更文挑战第10天】原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需知道如何创建的细节。这种模式的核心思想是基于一个原型实例,通过复制这个原型来创建新的对象

原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需知道如何创建的细节。这种模式的核心思想是基于一个原型实例,通过复制这个原型来创建新的对象。

概念

在原型模式中,通常会有一个原型接口,它定义了克隆自身的方法。具体原型类实现这个接口,并给出克隆自身的具体实现方法。这样,任何时候当需要一个与当前对象状态相同的新对象时,就可以通过复制这个对象来获得,而不是重新创建。

优点

  1. 性能提升:原型模式允许复制一个已存在的对象,相较于新建对象,复制通常更加高效。
  2. 避免构造函数的约束:直接复制对象,可以避免复杂的构造函数调用,特别是当对象创建过程复杂或创建成本较高时。
  3. 灵活性增强:可以在运行时通过克隆来增加或减少产品的数量,提高系统的灵活性。
  4. 原型独立性:复制对象不会对原有的类体系结构造成侵入。

缺点

  1. 深拷贝与浅拷贝问题:需要注意对象的复制方式是深拷贝还是浅拷贝,否则可能会引发问题。
  2. 复杂对象的复制:如果原型对象的结构复杂,复制的实现可能会非常困难。
  3. 维护难度:当被复制的对象变化时,所有的复制品都可能需要变更,这在一定程度上增加了系统的维护难度。

Java代码举例

下面是一个简单的原型模式实现示例,通过实现Cloneable接口来完成对象的复制。

java复制代码

class Prototype implements Cloneable {
    private String name;

    public Prototype(String name) {
        this.name = name;
    }

    // 提供克隆方法
    public Prototype clone() throws CloneNotSupportedException {
        return (Prototype) super.clone();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class PrototypeDemo {
    public static void main(String[] args) {
        try {
            Prototype prototype = new Prototype("原型对象");
            Prototype cloned = prototype.clone();
            
            System.out.println("原型对象的名称: " + prototype.getName());
            System.out.println("克隆对象的名称: " + cloned.getName());

            // 验证克隆后的对象是否相同
            System.out.println("原型对象与克隆对象是否相同:" + (prototype == cloned));

        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,Prototype类实现了Cloneable接口,并覆盖了clone方法,使得可以通过这个方法来获取一个对象的复制品。这个例子很好地展示了原型模式的核心思想——通过复制一个已存在的对象来创建新的对象。

相关文章
|
22天前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
4天前
|
设计模式 存储 安全
Java中的23种设计模式
Java中的23种设计模式
6 1
|
18天前
|
设计模式 开发框架 算法
C++中的设计模式:基本概念与应用
C++中的设计模式:基本概念与应用
24 2
|
19天前
|
设计模式 存储 前端开发
Java的mvc设计模式在web开发中应用
Java的mvc设计模式在web开发中应用
|
22天前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
24天前
|
设计模式 Java 数据库
【设计模式】JAVA Design Patterns——Converter(转换器模式)
转换器模式旨在实现不同类型间的双向转换,减少样板代码。它通过通用的Converter类和特定的转换器(如UserConverter)简化实例映射。Converter类包含两个Function对象,用于不同类型的转换,同时提供列表转换方法。当需要在逻辑上对应的类型间转换,或处理DTO、DO时,此模式尤为适用。
【设计模式】JAVA Design Patterns——Converter(转换器模式)
|
8月前
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例
|
8月前
|
设计模式 存储 安全
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
28 0
|
1月前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
1月前
|
设计模式 SQL 安全
Java一分钟之-设计模式:单例模式的实现
【5月更文挑战第16天】本文介绍了单例模式的四种实现方式:饿汉式(静态初始化)、懒汉式(双检锁)、静态内部类和枚举单例,以及相关问题和解决方法。关注线程安全、反射攻击、序列化、生命周期和测试性,选择合适的实现方式以确保代码质量。了解单例模式的优缺点,谨慎使用,提升设计效率。
33 3

热门文章

最新文章