设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景

系列文章目录

设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景


文章目录


一、什么是原型模式

原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新的对象,而无需通过调用构造函数来创建。原型模式通过克隆操作来创建对象,提供了一种更加灵活和高效的对象创建方式。

在现实生活中,原型模式的例子可以是制作玩具的模具。模具(原型对象)定义了玩具的形状和细节,而根据模具可以快速复制出多个相同的玩具(克隆对象)。

二、使用场景

  1. 当创建新对象的成本较高时,可以使用原型模式来复制一个现有对象来创建新对象,避免了重复的初始化操作。
  2. 当需要创建的对象是动态的,并且无法提前确定其具体类型时,可以使用原型模式。通过克隆操作,可以将复制对象的具体类型由运行时动态决定。

三、代码示例

下面是一个通俗易懂的原型模式示例代码,以动物克隆为场景:

cpp 复制代码
// 抽象原型:动物
abstract class Animal implements Cloneable {
    private String name;

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

    public String getName() {
        return name;
    }

    public abstract Animal clone();
}

// 具体原型:猫
class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public Animal clone() {
        return new Cat(getName());
    }
}

// 具体原型:狗
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public Animal clone() {
        return new Dog(getName());
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat("Tom");
        Animal clonedCat = cat.clone();
        System.out.println("Original Cat: " + cat.getName());
        System.out.println("Cloned Cat: " + clonedCat.getName());

        Animal dog = new Dog("Max");
        Animal clonedDog = dog.clone();
        System.out.println("Original Dog: " + dog.getName());
        System.out.println("Cloned Dog: " + clonedDog.getName());
    }
}

在上面的示例中,Animal是抽象原型类,定义了动物的名称和克隆方法clone。Cat和Dog是具体原型类,分别实现了抽象原型类的克隆方法,并在构造函数中设置动物的名称。

在客户端代码中,首先创建了一个原始的猫对象cat,然后通过调用clone方法克隆出一个新的猫对象clonedCat。同样地,创建了一个原始的狗对象dog,并克隆出一个新的狗对象clonedDog。最后,打印出原始动物和克隆动物的名称。

通过使用原型模式,可以在不通过构造函数创建对象的情况下,复制现有对象来创建新对象。这种方式可以避免重复的初始化操作,提高对象的创建效率。同时,原型模式也提供了一种动态创建对象的方式,允许根据运行时决定复制对象的具体类型。

相关推荐
赛姐在努力.6 分钟前
Spring DI详解--依赖注入的三种方式及优缺点分析
java·mysql·spring
IvanCodes28 分钟前
六、Docker 核心技术:Dockerfile 指令详解
java·数据库·docker
_oP_i37 分钟前
Java 服务接口中解决跨域(CORS,Cross-Origin Resource Sharing)问题
java·开发语言
用户9446814013501 小时前
部分替代Lombok?不可变数据的载体?一篇文章带你了解JDK16正式引用的record类型!
java
用户0332126663671 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java
轮到我狗叫了1 小时前
力扣.1054距离相等的条形码力扣767.重构字符串力扣47.全排列II力扣980.不同路径III力扣509.斐波那契数列(记忆化搜索)
java·算法·leetcode
渣哥1 小时前
你遇到过 ConcurrentModificationException 吗?其实很常见
java
lunzi_fly1 小时前
【源码解读之 Mybatis】【基础篇】-- 第1篇:MyBatis 整体架构设计
java·mybatis
o0向阳而生0o1 小时前
100、23种设计模式之适配器模式(9/23)
设计模式·适配器模式
JIngJaneIL2 小时前
汽车租赁|基于Java+vue的汽车租赁系统(源码+数据库+文档)
java·vue.js·spring boot·汽车·论文·毕设·汽车租赁系统