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

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

相关推荐
yiyiy111yiy6 天前
关于Harmony的学习
前端·javascript·学习·原型模式
凌晨五点的星8 天前
网络安全-原型链污染
原型模式
coffee_baby8 天前
原型模式详细介绍和代码实现
java·开发语言·原型模式
涛涛酱1008610 天前
前端面试实录,(回答均为个人见解)
前端·面试·原型模式
AI让世界更懂你11 天前
漫谈设计模式 [4]:原型模式
python·设计模式·原型模式
Aloha_up12 天前
原型模式prototype
原型模式
爱吃java的羊儿12 天前
axure9勾选多个删除,弹框显示多个中继器编号
原型模式
哑巴语天雨12 天前
原型与原型链
前端·javascript·原型模式
SAO&asuna12 天前
设计模式-原型模式
设计模式·原型模式