首页 > 其他分享 >软件模式-原型模式

软件模式-原型模式

时间:2024-09-12 20:35:36浏览次数:15  
标签:克隆 对象 clone 模式 Shape 原型 软件 public

原型模式的核心思想
原型模式的核心是使用一个原型接口来定义一个克隆方法,该方法允许对象自身进行复制。通过这个克隆方法,可以快速生成一个与原型对象相同的实例,而不需要直接创建新对象并手动设置属性。

原型模式的结构
原型接口(Prototype):定义一个 clone() 方法,用于克隆对象。
具体原型类(Concrete Prototype):实现原型接口,提供自身的复制方法。
客户端(Client):通过调用原型对象的 clone() 方法来创建新的对象,而不是通过构造函数。
原型模式的实现
示例:假设我们有一个 Shape 类,使用原型模式来克隆不同类型的形状对象。

import java.util.HashMap;
import java.util.Map;
// 原型接口
abstract class Shape implements Cloneable {
private String id;
protected String type;

abstract void draw();

public String getType() {
    return type;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}
// 实现克隆方法
@Override
public Object clone() {
    Object clone = null;
    try {
        clone = super.clone();
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
    return clone;
}

}
// 具体原型类:Rectangle
class Rectangle extends Shape {
public Rectangle() {
type = "Rectangle";
}

@Override
public void draw() {
    System.out.println("Drawing a Rectangle");
}

}
// 具体原型类:Circle
class Circle extends Shape {
public Circle() {
type = "Circle";
}

@Override
public void draw() {
    System.out.println("Drawing a Circle");
}

}
// 具体原型类:Square
class Square extends Shape {
public Square() {
type = "Square";
}

@Override
public void draw() {
    System.out.println("Drawing a Square");
}

}
// ShapeCache 用于缓存形状对象并克隆
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);
    
    Square square = new Square();
    square.setId("2");
    shapeMap.put(square.getId(), square);
    
    Rectangle rectangle = new Rectangle();
    rectangle.setId("3");
    shapeMap.put(rectangle.getId(), rectangle);
}

}
// 测试类
public class Main {
public static void main(String[] args) {
// 预加载缓存中的形状对象
ShapeCache.loadCache();

    // 通过克隆获取对象
    Shape clonedShape1 = ShapeCache.getShape("1");
    System.out.println("Shape : " + clonedShape1.getType());  // 输出 "Shape : Circle"
    
    Shape clonedShape2 = ShapeCache.getShape("2");
    System.out.println("Shape : " + clonedShape2.getType());  // 输出 "Shape : Square"
    
    Shape clonedShape3 = ShapeCache.getShape("3");
    System.out.println("Shape : " + clonedShape3.getType());  // 输出 "Shape : Rectangle"
}

}
原型模式的要点
克隆方法:在 Shape 类中,clone() 方法来自 Cloneable 接口,允许创建当前对象的副本。
缓存原型对象:ShapeCache 类缓存了各种形状对象,并通过 getShape() 方法来克隆它们,客户端可以从缓存中获取新对象,而无需重新创建。
对象的浅拷贝和深拷贝:clone() 方法默认进行的是浅拷贝,如果对象包含引用类型的成员变量,可能需要进行深拷贝。
浅拷贝与深拷贝
浅拷贝:只复制对象的基本类型字段和对象引用,引用类型的字段指向的是同一个对象(即对象内引用的对象未被复制)。
深拷贝:不仅复制对象本身,还递归复制对象所引用的所有对象。深拷贝可以通过手动实现,或者使用序列化的方式来完成。
原型模式在现实中的应用
对象池:比如在数据库连接池中,可以通过克隆原型连接来快速创建新的数据库连接对象。
游戏开发:在游戏中,常常需要创建相似的对象(如游戏角色、道具等),原型模式可以用来快速复制对象并应用不同的属性。
文档编辑软件:可以将常用的模板文档作为原型,快速生成新的文档副本。
通过使用原型模式,Java开发者可以有效提高对象创建的效率,减少资源消耗,并且方便地管理对象的复制和创建过程。

标签:克隆,对象,clone,模式,Shape,原型,软件,public
From: https://www.cnblogs.com/torrentgz/p/18411028

相关文章

  • Java设计模式之责任链模式详细讲解和案例示范
    在本文中,我们将详细讲解Java设计模式中的责任链模式,探讨其基本概念、使用场景、常见问题和解决方式。同时,我们还会介绍责任链模式与策略模式的区别,并结合电商交易系统的示例进行说明。此外,我们还会探讨责任链模式在开源框架中的应用。1.责任链模式概述责任链模式是一种行......
  • 【软件】Rhythmbox播放器调节音量
    Rhythmbox播放器调节音量零、起因最近换了Ubuntu系统,在写代码时想听歌,故使用Rhythmbox播放器播放一些mp3文件,但同时又要看教程,希望音乐声音小一点,但是找来找去都没有发现Rhythmbox有调音量的地方,官网上有指引:https://help.gnome.org/users/rhythmbox/stable/Usage.html.zh_CN,但......
  • Windows软件包管理器安装Chocolatey
    Windows用户建议先安装 Chocolatey,这是一个Windows下的命令行软件管理器,可以方便开发者像在Linux下使用yum命令来安装软件,或者像在macOS下使用brew命令来安装软件,非常酷炫。1、安装Chocolatey使用管理员权限执行powershell,执行Set-ExecutionPolicyBypass-Scope......
  • solidworks软件许可优化解决方案
    Solidworks软件介绍SolidWorks是达索系统(DassaultSystemes )下的子公司,专门负责研发与销售机械设计软件的视窗产品,公司总部位于美国马萨诸塞州。达索公司是负责系统性的软件供应,并为制造厂商提供具有Internet整合能力的支援服务。该集团提供涵盖整个产品生命周期的系统,包括设计......
  • 1 软件测试阶段 软件测试方法 可靠性设计 数据库设计
    1、软件测试包括哪些阶段?2、什么是单元测试,目的是什么?3、什么是集成测试,目的是什么?4、什么是系统测试、目的是什么?5、系统测试包括哪些内容,简要描述?6、系统测试的流程是怎样?7、系统测试中的性能测试包括哪些内容,简要描述?8、什么是验收测试?9、单元测试、集成测试、系统测试......
  • AD软件 原理图器件如何集体改封装以及如何添加封装库
    一、菜单栏点击【工具】→【封装管理器 】;二、选择需要集体更改的封装,按住【Ctrl】键可多选,然后【添加】;三、点击【浏览】;四、我们前面第二部选择更改的电容封装,这里选择电容类封装库;五、点击需要的电容型号封装,点击【确定】;六、如果说这些已安装的库里没有我们想要......
  • 两种消息传递模式:发布订阅模式,排队模式
    Kafka是一种分布式流处理平台,支持多种消息传递模式,其中最主要的两种模式是发布-订阅(Pub-Sub)和排队(Queueing)。具体来说,Kafka的设计和实现允许它灵活地支持这两种模式。发布-订阅(Pub-Sub)模式在Kafka中,主题(Topic)是发布-订阅模式的核心概念:Producer(生产者)将消息发布到一个或多个......
  • EdrawMax v13 解锁版下载及安装教程 (综合图形图表设计软件)
    前言万兴亿图图示(WondershareEdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(EdrawMax)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学教育插......
  • 【软件设计师真题】下午题第二大题---数据库设计
    系列文章目录1.【软考之软件设计师】PPT课件2.【软考之软件设计师】学习笔记3.【软件设计师真题】下午题第一大题—数据流图设计4.【软件设计师真题】下午题第二大题—数据库设计5.【软件设计师真题】下午题第三大题—UML分析与设计6.【软件设计师真题】下午题......
  • 推荐2024年10款优质电脑监控软件,电脑监控软件提供工作效率
    随着远程办公、在线学习以及企业信息化管理的需求不断增加,电脑监控软件成为了保障工作效率和信息安全的重要工具。它们可以帮助企业监控员工的工作进度、管理互联网使用情况,以及防止数据泄露。家长也可以通过这些软件来监督孩子的上网行为,确保网络安全。本文将为大家推荐10款在......