Prototype 原型

意图

用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

结构

  • Prototype声明一个复制自身的接口。
  • ConcretePrototype实现一个复制自身的操作。
  • Client让一个原型复制自身从而创建一个新的对象。

适用性

  • 当一个系统应该独立于他的产品创建、构成和表示时。
  • 当要实例化的类是在运行时刻指定时,例如通过动态加载。
  • 为了避免创建一个与产品类层次平行的工厂类层次时。
  • 当一个累的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。

代码示例

// 产品接口
interface Product {
    Product clone();
}

// 具体产品A
class ProductA implements Product {
    private String name;
    private int age;

    public ProductA(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public Product clone() {
        return new ProductA(name, age);
    }

    // ... 其他方法
}

// 具体产品B
class ProductB implements Product {
    private String color;
    private double weight;

    public ProductB(String color, double weight) {
        this.color = color;
        this.weight = weight;
    }

    @Override
    public Product clone() {
        return new ProductB(color, weight);
    }

    // ... 其他方法
}

// 客户端
public class Client {
    public static void main(String[] args) {
        // 创建原型对象
        ProductA productA = new ProductA("ProductA", 10);
        ProductB productB = new ProductB("Red", 1.5);

        // 克隆原型对象
        ProductA clonedProductA = productA.clone();
        ProductB clonedProductB = productB.clone();

        // 修改克隆对象
        clonedProductA.setName("ClonedProductA");
        clonedProductB.setColor("Blue");

        // 输出结果
        System.out.println(productA); // 输出: ProductA{name='ProductA', age=10}
        System.out.println(clonedProductA); // 输出: ProductA{name='ClonedProductA', age=10}
        System.out.println(productB); // 输出: ProductB{color='Red', weight=1.5}
        System.out.println(clonedProductB); // 输出: ProductB{color='Blue', weight=1.5}
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/535912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设备基础命令,路由基础

直连路由 静态路由 动态路由 根据路由器学习路由信息、生成并维护路由表的方法包括直连路由(Direct)、静态路由(Static)和动态路由(Dynamic)。直连路由:路由器接口所连接的子网的路由方式称为直连路由;非直连路由:通过路由协议从别的路由器…

docker exec 命令提示:Error: No such container: /bin/bash

虽然是低级错误,但是还是记录一下吧。。。。。。。。 这个容器运行起来了,docker ps 是可以查询到的 但是 我想进入 容器内部时就出现了: docker exec -it /bin/bash e51b4dcdf51a Error: No such container: /bin/bash 开始以为是容器内部…

C语言 | Leetcode C语言题解之第22题括号生成

题目: 题解: // 回溯法求解 #define MAX_SIZE 1430 // 卡特兰数: 1, 1, 2, 5, 14, 42, 132, 429, 1430 void generate(int left, int right, int n, char *str, int index, char **result, int *returnSize) {if (index 2 * n) { // 当前长度已达2nre…

多线程的入门(五)线程池的保活策略

线程池是如何保活的呢?通过对源码的分析得出,线程池通过阻塞队列,与关闭工作线程后新生成空闲线程实现的保活策略源代码如下: runkworker()方法的getTask()方法中有这样一段代码&…

FMix: Enhancing Mixed Sample Data Augmentation 论文阅读

1 Abstract 近年来,混合样本数据增强(Mixed Sample Data Augmentation,MSDA)受到了越来越多的关注,出现了许多成功的变体,例如MixUp和CutMix。通过研究VAE在原始数据和增强数据上学习到的函数之间的互信息…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境,其实整个过程比较重复和固定,所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

Nginx+Keepalived Kubernetes 负载均衡

部署NginxKeepalived高可用负载均衡器 kube-apiserver高可用架构图: Nginx是一个主流Web服务和反向代理服务器,这里用四层实现对apiserver实现负载均衡。Keepalived是一个主流高可用软件,基于VIP绑定实现服务器双机热备,在上述拓…

关于部署ELK和EFLKD的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana(展示数据可视化界面)1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…

React + three.js 3D模型骨骼绑定

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 项目代码(github):https://github.com/couchette/simple-react-three-skeleton-demo 项目代码(gitcode):https:…

这几个方面需要注意,减少服务器被入侵

网络时代,服务器和计算机不时地遭受入侵和攻击,给人们带来了无法预料的重大损失。诸如服务器入侵、数据盗窃和勒索软件等事件频繁发生,这令许多企业和游戏开发团队备受困扰。通过总结经验和吸取教训,我们必须汲取教益,…

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传 输)是一种基于客户端-服务端架构的消息传输协议,如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊…

pycharm debug 的时候 waiting for process detach

当你使用pycharm debug或者run的时候,突然出现了点不动,然后一直显示:waiting for process detach 可能是以下问题: 1、需要设置Gevent compatible pycharm一直没显示运行步骤,只是出现waiting for process detach-C…

正则表达式---【Python版】

目录 前言 一.正则表达式概括 1.1简介 1.2使用场景 二.正则表达式语法 2.1基本匹配 2.2元字符 2.2.1点运算符. 2.2.2字符类[] 2.2.3否定字符类 2.2.4*号 2.2.5号 2.2.6?号 2.2.7{}号 2.2.8()号 2.2.9|或运算 2.2.10转码特殊字符\ 2.2.11^和$ 2.3简…

【论文阅读】Digging Into Self-Supervised Monocular Depth Estimation

论文:https://arxiv.org/pdf/1806.01260.pdf 代码:https://github.com/nianticlabs/monodepth2 Q: 这篇论文试图解决什么问题? A: 这篇论文试图解决的问题是如何提高仅使用单目图像进行深度估计的性能。具体来说,它关注的是如何…

Django开发:计划表网页全流程

Hello , 我是"小恒不会java"。考虑到django官网案例的代码对新手不太友好 那我将一个案例从思路到代码都简单完整的摆出来, 使用过django的各位可cv即可,不会django跟着走操作就能跑起来 项目展示 本案例在GitHub已经开源,可在后台…

云HIS医院管理系统源码 SaaS模式 B/S架构 基于云计算技术

一、系统概述 云HIS系统源码是一款满足基层医院各类业务需要的健康云产品。该系统能帮助基层医院完成日常各类业务,提供病患预约挂号支持、收费管理、病患问诊、电子病历、开药发药、住院检查、会员管理、财务管理、统计查询、医生工作站和护士工作站等一系列常规功…

LangChain入门:18.使用ReAct 框架进行生成推理痕迹和任务特定行动来实现更大的协同作用

简介 ReAct对话模型是LangChain框架中的一种重要模型,它可以用于构建智能对话系统。ReAct对话模型的核心思想是使用反应堆(Reactor)来处理对话中的各种情况,从而实现了对复杂对话场景的解构。 在ReAct对话模型中,反应…

【高端电流检测IC储能产品应用方案】耐压28V侧轨的电流检测芯片FP130A 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

电流检测技术常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流侦测等场景。对于大多数应用而言,都是间接测量电阻两端的跨压差来获取待测电流。 如下面的高端电流检测芯片FP130A,丝印是FC915。电路原理图…

ASP.NET Core 标识(Identity)框架系列(二):使用标识(Identity)框架生成 JWT Token

前言 JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络上以 JSON 对象的形式安全地传输信息。 JWT 通常用于在用户和服务器之间传递身份验证信息,以便在用户进行跨域访问时进行身份验证。 JWT 由…

Docker 学习笔记(三):Centos7 中 Docker 使用,镜像、容器,以及操作等常用命令小结

一、前言 记录时间 [2024-4-7] 前置文章: Docker学习笔记(一):入门篇,Docker概述、基本组成等,对Docker有一个初步的认识 Docker学习笔记(二):在Linux中部署Docker&#…