一文带你了解Java创建型设计模式之原型模式

yizhihongxing

一文带你了解Java创建型设计模式之原型模式

什么是原型模式?

原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需通过实例化类来创建。这种模式通过克隆已有对象来创建新对象,从而避免了创建对象时的复杂初始化过程。

原型模式的实现方式

在Java中,实现原型模式通常需要满足以下两个条件:

  1. 实现Cloneable接口:该接口是一个标记接口,用于指示对象可以进行克隆操作。
  2. 重写clone()方法:在该方法中,通过调用super.clone()方法来创建对象的副本。

下面是一个示例代码,演示了如何使用原型模式创建对象:

public abstract class Shape implements Cloneable {
    private String id;
    protected String type;

    public abstract void draw();

    public String getId() {
        return id;
    }

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

    public String getType() {
        return type;
    }

    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

public class Circle extends Shape {
    public Circle() {
        type = \"Circle\";
    }

    @Override
    public void draw() {
        System.out.println(\"Inside Circle::draw() method.\");
    }
}

public class Rectangle extends Shape {
    public Rectangle() {
        type = \"Rectangle\";
    }

    @Override
    public void draw() {
        System.out.println(\"Inside Rectangle::draw() method.\");
    }
}

public class Square extends Shape {
    public Square() {
        type = \"Square\";
    }

    @Override
    public void draw() {
        System.out.println(\"Inside Square::draw() method.\");
    }
}

public class ShapeCache {
    private static Map<String, Shape> shapeMap = new HashMap<>();

    public static Shape getShape(String shapeId) {
        Shape cachedShape = shapeMap.get(shapeId);
        return (Shape) cachedShape.clone();
    }

    public static void loadCache() {
        Circle circle = new Circle();
        circle.setId(\"1\");
        shapeMap.put(circle.getId(), circle);

        Rectangle rectangle = new Rectangle();
        rectangle.setId(\"2\");
        shapeMap.put(rectangle.getId(), rectangle);

        Square square = new Square();
        square.setId(\"3\");
        shapeMap.put(square.getId(), square);
    }
}

public class PrototypePatternDemo {
    public static void main(String[] args) {
        ShapeCache.loadCache();

        Shape clonedShape1 = ShapeCache.getShape(\"1\");
        System.out.println(\"Shape : \" + clonedShape1.getType());

        Shape clonedShape2 = ShapeCache.getShape(\"2\");
        System.out.println(\"Shape : \" + clonedShape2.getType());

        Shape clonedShape3 = ShapeCache.getShape(\"3\");
        System.out.println(\"Shape : \" + clonedShape3.getType());
    }
}

在上述示例中,我们定义了一个抽象类Shape,它实现了Cloneable接口并重写了clone()方法。然后,我们创建了三个具体的形状类CircleRectangleSquare,它们都继承自Shape类并实现了draw()方法。我们还创建了一个ShapeCache类,用于缓存形状对象,并提供了getShape()方法来获取克隆的形状对象。最后,在PrototypePatternDemo类中,我们演示了如何使用原型模式来创建对象。

通过以上示例,您可以了解如何使用原型模式在Java中创建对象。原型模式可以帮助我们避免复杂的对象初始化过程,提高对象创建的效率和灵活性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你了解Java创建型设计模式之原型模式 - Python技术站

(0)
上一篇 2023年10月15日
下一篇 2023年10月15日

相关文章

  • latex编号右对齐命令

    LaTeX编号右对齐命令 在 LaTeX 中,我们经常需要对文档中的编号进行右对齐,比如章节编号、图表编号等等。本文将介绍如何使用 LaTeX 中的命令实现编号右对齐的效果。 LaTeX 中有一个命令 \hfill,它可以让编号右对齐。具体来说,我们可以把需要编号的内容放在一个小组里,然后在小组内使用 \hfill 命令将编号右对齐。下面是一个示例: \be…

    其他 2023年3月28日
    00
  • JavaScript 原型继承之构造函数继承

    JavaScript 原型继承之构造函数继承攻略 什么是构造函数继承 构造函数继承(也称为经典继承)是一种使用构造函数来创建对象并继承来自父类的属性和方法的方法。这种方式通过在子类的构造函数中调用父类构造函数以继承属性,然后将子类原型设置为父类实例来继承方法。 如何进行构造函数继承 在子类构造函数中,通过调用父类构造函数,来继承父类的属性: function…

    other 2023年6月27日
    00
  • Hadoop2.X/YARN环境搭建–CentOS7.0 JDK配置

    Hadoop2.X/YARN环境搭建–CentOS7.0 JDK配置 环境准备 系统:CentOS 7.0 JDK版本:Java 1.8 JDK配置 下载JDK:在官网下载JDK安装包,或者使用yum命令安装: sudo yum install java-1.8.0-openjdk-devel 配置环境变量:在/etc/profile文件中添加以下内容: …

    other 2023年6月27日
    00
  • deepqnetwork(dqn)原理解析

    Deep Q Network (DQN)原理解析 Deep Q Network (DQN)是一种可以将深度学习应用于强化学习的算法,由Google DeepMind公司在2015年提出。DQN旨在解决传统Q学习中状态空间过大的问题,在一定程度上缓解了强化学习中的稀疏奖励和延迟奖励问题。 Q-Learning 与 DQN DQN是基于Q-learning的改进…

    其他 2023年3月28日
    00
  • vundle简介安装

    Vundle是一款用于管理Vim插件的工具,可以方便地安装、更新和删除Vim插件。以下是Vundle的简介、安装和使用的完整攻略,包含两个示例说明: 简介 Vundle是一款轻量级的Vim插件管理器,可以方便地安装、更新和删除Vim插件。Vundle使用Vim脚本编写,可以与Git版本控制系统集成,支持自动安装和更新插件。 安装 安装Vundle需要执行以下…

    other 2023年5月9日
    00
  • java创建list

    以下是“Java创建List”的完整攻略: Java创建List 在Java中,List是一种常用的数据结构,它可以存储一组有序的元素。本攻略将介绍如何在Java中创建List。 步骤1:导入List类 在创建List之前,您需要导入Java的List类。您可以使用以下代码导入List类: import java.util.List; 步骤2:创建List对…

    other 2023年5月7日
    00
  • mysql去重查询的三种方法小结

    MySQL去重查询的三种方法小结 在MySQL中,我们经常需要进行去重查询,以获取唯一的结果集。以下是三种常用的去重查询方法的详细讲解: 方法一:使用DISTINCT关键字 使用DISTINCT关键字可以从查询结果中去除重复的行。 示例说明1:查询表中不重复的城市列表 SELECT DISTINCT city FROM customers; 方法二:使用GR…

    other 2023年10月18日
    00
  • serv-u安全配置完整版

    Serv-U 是一款常用的 FTP 服务器软件,为了保证服务器的安全性,需要进行安全配置。以下为 Serv-U 完整版安全配置攻略。 1. HTTPS 连接 为了保证数据传输的安全,我们可以开启 HTTPS 连接,具体步骤如下: 在 Serv-U 管理界面选择“网站” -> “网站配置”; 在“网站配置”界面中,点击“添加”新建一个网站; 在新建的网站…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部