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

1. 设计模式的分类

创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。

结构型模式(七种):适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。

行为型模式(十一种):状态模式、模板方法模式、访问者模式、迭代子模式、责任链模式、备忘录模式、解释器模式、命令模式、中介者模式、观察者模式、策略模式。

2. 什么是原型模式?

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

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

3. 原型模式的组成

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

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

4. 原型模式的实现

4.1 定义一个原型接口

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

java 复制代码
public interface Prototype extends Cloneable{
    Prototype clone();
}

4.2 创建具体原型类

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

java 复制代码
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 客户端代码

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

java 复制代码
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中实现原型模式。希望本文能帮助你更好地理解和应用原型模式。

相关推荐
WaaTong6 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
morning_judger2 天前
【设计模式系列】原型模式(十一)
java·设计模式·原型模式
飞升不如收破烂~3 天前
在Spring框架中,容器管理的bean可以有不同的作用域(scope),其中最常用的两种是单例(singleton)和原型(prototype)。
spring·单例模式·原型模式
安泽13143 天前
【修订中】js 中apply call bind 用法
原型模式
Komorebi_99994 天前
JavaScript 判断数据类型有哪些方法?
开发语言·javascript·原型模式
无敌岩雀4 天前
C++设计模式创建型模式———原型模式
c++·设计模式·原型模式
一条晒干的咸魚4 天前
【Web前端】JavaScript 对象原型与继承机制
开发语言·前端·javascript·原型模式·web前端
shinelord明4 天前
【再谈设计模式】原型模式~复制的魔法师
开发语言·设计模式·原型模式
wrx繁星点点7 天前
解释器模式:有效处理语言的设计模式
java·开发语言·spring·servlet·设计模式·解释器模式·原型模式
wrx繁星点点9 天前
原型模式:高效的对象克隆解决方案
数据结构·spring·spring cloud·java-ee·maven·intellij-idea·原型模式