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

一文带你了解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日

相关文章

  • 沉淀再出发:关于IntelliJ IDEA使用的一些总结

    沉淀再出发:关于 IntelliJ IDEA 使用的一些总结 IntelliJ IDEA 是一款既强大又流行的集成开发环境(Integrated Development Environment,IDE),它被广泛应用于 Java、Kotlin 等编程语言的开发中。在长期的使用过程中,我对 IntelliJ IDEA 进行了一些总结,分享一些使用上的技巧和注意…

    其他 2023年3月28日
    00
  • C语言基础文件操作方式超全详解建议收藏

    C语言基础文件操作方式超全详解建议收藏 为什么要学习文件操作 在编程中,文件操作是一种比较常见的操作方法。在实际项目中,我们需要与电脑中文件进行交互,比如将一些重要的数据存储到文件中,或者从文件中读取数据作为程序的输入。如果我们没有学会文件操作,那么我们就无法进行这类数据持久化的操作,这会严重影响我们的编程效率和开发质量。因此,学会C语言基础文件操作是非常重…

    other 2023年6月26日
    00
  • 错误:sem_union的存储大小未知问题的解决方法

    这个错误是由于在程序中使用了未定义的结构体或者是未包含正确的头文件导致的。解决这个问题的方法非常简单,只需要包含正确的头文件或者定义相应的结构体即可。 以下是两个示例说明: 示例一: 在使用sem_union结构体时,可能会遇到sem_union的存储大小未知的问题。这是因为在程序中未定义sem_union结构体,所以编译器无法判断其大小。解决方法是在程序中…

    other 2023年6月26日
    00
  • CentOS7中KVM虚拟机内存、CPU调整

    CentOS7中KVM虚拟机内存、CPU调整 在CentOS 7中,通过KVM虚拟化平台可以创建多个虚拟机,并可以通过调整内存和CPU的分配来满足不同虚拟机的需求。本文将介绍如何在CentOS 7中使用KVM虚拟化平台对虚拟机的内存和CPU进行调整。 1. 确认KVM虚拟机内存及CPU 通过使用以下命令可以查看KVM虚拟机的内存及CPU的信息: # virs…

    其他 2023年3月28日
    00
  • 话本小说如何查看版本号?话本小说查看版本号方法

    话本小说如何查看版本号? 话本小说是一款非常受欢迎的小说阅读应用程序,它提供了丰富的小说资源供用户阅读。如果你想查看话本小说的版本号,可以按照以下步骤进行操作: 打开话本小说应用程序:在你的设备上找到并点击话本小说应用程序的图标,以打开应用程序。 导航到设置页面:一旦你打开了话本小说应用程序,你需要找到设置选项。通常,设置选项可以在应用程序的底部导航栏或侧边…

    other 2023年8月3日
    00
  • Oracle递归树形结构查询功能

    Oracle数据库提供了递归树形结构查询功能,可以通过WITH语句和CONNECT BY子句来实现。 1.实现步骤 1.1 创建一个或多个递归查询的公共表达式,使用WITH语句定义。公共表达式通过递归引用自己来实现递归查询。 1.2 在公共表达式中使用CONNECT BY子句来连接父节点和子节点,使用START WITH子句指定查询的根节点。 1.3 在查询…

    other 2023年6月27日
    00
  • 如何在centos7上安装yarn

    如何在CentOS 7上安装Yarn Yarn是由Facebook开发的新一代包管理器,可用于管理Node.js包。Yarn比npm包管理器更快且可靠,同时支持同时下载和安装多个NPM包。本文将向您展示如何在CentOS 7上安装Yarn。 步骤1 – 安装NodeJS Yarn是一个基于NodeJS的包管理器,因此必须先安装Node.js。在CentOS …

    其他 2023年3月29日
    00
  • linux系统快捷键使用

    Linux系统快捷键使用攻略 Linux系统提供了许多快捷键,可以帮助用户更快地完成各种任务。本文将提供一些关于如何使用Linux系统快键的详细说明,包括如何使用Ctrl、Alt、Shift等键按键组合,以及如何使用命令行和图形界面。 常用快捷键 以下是一些常用的Linux系统快捷: Ctrl + C:中断当前进程。 Ctrl + D:退出当前终。 Ctrl…

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