当前位置: 首页 > article >正文

二十三种模式之原型模式(类比制作陶器更好理解一些)

1. 设计模式的分类

创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。
结构型模式(七种):适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。
行为型模式(十一种):状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式、备忘录模式、解释器模式、命令模式、中介者模式、观察者模式、策略模式。

2. 什么是原型模式?

原型模式是一种创建型设计模式,它允许一个对象在创建另一个可定制的对象,而无需知道如何创建的细节。这种模式通过复制现有的对象来创建新的实例,而不是新建一个。原型模式的主要优点是它可以避免直接创建对象的开销,特别是当对象创建过程复杂或耗时时。

(将原型模式融入生活,更好理解)想象一下,你正在制作陶器。你有一个原始的陶器模型,你可以通过复制这个模型来创建许多相似的陶器。这个过程不需要从头开始制作每一个陶器,而是通过复制一个已经存在的模型来快速创建新的陶器。这就是原型模式的核心思想:通过复制已有对象来创建新对象,而不是每次都从头开始创建。

3. 原型模式的组成

原型模式通常包含以下角色:

  • 原型(Prototype):这是一个抽象类或接口,声明了克隆自身的接口。
  • 具体原型(Concrete Prototype):实现克隆接口以创建自己的副本。
  • 客户端(Client):使用克隆方法创建对象的实例。

4. 原型模式的实现

4.1 定义一个原型接口

首先,定义一个原型接口,它声明了一个 clone() 方法。

public interface Prototype extends Cloneable{
    Prototype clone();
}

4.2 创建具体原型类

然后,创建一个具体的原型类,实现 Prototype 接口,并重写 clone() 方法。

public class ConcretePrototype implements Prototype{

    private String id;
    private String value;

    public ConcretePrototype(String id, String value) {
        this.id = id;
        this.value = value;
    }

    @Override
    public Prototype clone() {
        try {
            return (ConcretePrototype)super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "ConcretePrototype{" +
                "id='" + id + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

4.3 客户端代码

最后,编写客户端代码,使用原型模式创建对象的副本。

public class Main {
    public static void main(String[] args) {
        //创建一个原型实例
        ConcretePrototype prototype = new ConcretePrototype("1","阿伟");
        //克隆原型,创建一个新对象
        Prototype clonePrototype = prototype.clone();

        System.out.println("Original:" + prototype);
        System.out.println("Clone:" + clonePrototype);
    }
}

以下为运行结果:

5. 原型模式的适用场景

原型模式适用于以下场景:

  1. 创建对象成本较大时:如果创建对象的实例非常消耗资源,使用原型模式可以避免不必要的开销。
  2. 创建对象需要很多时间:当对象的创建过程非常耗时时,原型模式可以提供一种快速的创建方式。
  3. 对象创建需要特定环境或条件:在某些情况下,对象的创建依赖于特定环境或条件,原型模式可以简化这一过程。

6. 总结

原型模式是一种强大的设计模式,它可以显著提高对象创建的效率,特别是在对象创建成本较高或需要特定条件时。通过实现 Cloneable 接口和重写 clone() 方法,我们可以轻松地在Java中实现原型模式。希望本文能帮助你更好地理解和应用原型模式。


http://www.kler.cn/a/300829.html

相关文章:

  • 【Linux】Socket编程-TCP构建自己的C++服务器
  • Linux查看日志命令
  • 网站收录入口提交的方法有哪些(网站收录的方式都有哪些)
  • lwip单网卡多ip的实现
  • 安装指南:LLaMA Factory、AutoGPTQ 和 vllm
  • Linux-----线程操作(创建)
  • RK3588高性能处理器助力测量机器人精准作业
  • 【数据结构】堆——堆排序与海量TopK问题
  • Sqlserver常用sql
  • 【有啥问啥】计算机视觉领域中的光流(Optical Flow)是什么?
  • Android相关线程基础
  • 苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF-8表示进行比较
  • 各种无人机飞行服务技术详解
  • 基于Netty实现TCP客户端
  • Python集合应用:10+个集合操作的实用案例
  • 海康SDK对接 超脑设备-下发人员信息和人脸
  • 前端面试常见手写题
  • C/C++ 网络编程之关于多核利用问题
  • 【openGauss】WDR快照无法生成或执行生成不报错,但是snapshot.snapshot为空的问题
  • Linux s3c2440 开发板上的操作系统实现 ubuntu
  • 《中国制药设备行业市场现状分析与发展前景预测研究报告》
  • spring中添加@Test注解测试
  • docker的相关网络问题
  • 【编程基础知识】mysql中的insert into ... on DUPLICATE key和replace into的性能对比
  • AI产品经理:站在科技风口上的新兴职业
  • 一些实用的高阶用法--python