设计模式:原型

创新设计模式之一是原型设计模式 。 尽管原型是创造模式,但它在概念上与其他模式有所不同。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 java-design-patterns

原型模式的所有魔力都基于Java Object的clone()方法。 因此,让我们考虑一个用法示例,然后我将尝试找出该模式的利弊。

原型设计模式Java

上面的类图向我们展示了该模式的基本含义。 抽象类或接口可以充当原型的角色。 注意,原型必须扩展Cloneable接口。 这是因为原型的具体实现将调用clone()方法。 实现接口的特定类(扩展了抽象类)必须包含方法,该方法将在克隆操作的帮助下返回其自身的副本。

在我的示例中,我将Unicellular接口声明为原型,并将Amoeba类声明为其实现:

public interface Unicellular extends Cloneable {public Unicellular reproduce();}
public class Amoeba implements Unicellular {public Unicellular reproduce() {Unicellular amoeba = null;try {amoeba = (Unicellular) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return amoeba;}public String toString() {return "Bla bla bla it's a new amoeba...";}}

示范:

...public static void main(String[] args) {Unicellular amoeba = new Amoeba();List< Unicellular > amoebaList = new ArrayList< Unicellular >();amoebaList.add(amoeba.reproduce());amoebaList.add(amoeba.reproduce());amoebaList.add(amoeba.reproduce());for (Unicellular a : amoebaList)System.out.println(a);}
...

结果:

Bla bla bla it’s a new amoeba…
Bla bla bla it’s a new amoeba…
Bla bla bla it’s a new amoeba…

利弊如何? 实际上,我不知道该说些什么,因为我从未遇到过适当应用原型模式的情况。 也许在某些情况下,当您不需要显式调用构造函数或系统不需要依赖于对象创建方式时。

参考: 设计模式:来自JCG合作伙伴 Alexey Zvolinskiy的原型 ,位于Fruzenshtein的注释博客中。

翻译自: https://www.javacodegeeks.com/2013/06/design-patterns-prototype.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SecureCRT连接AWS EC2云主机密码登录

申请了亚马逊的EC2&#xff0c;要通过ssh 加密钥的形式登录&#xff0c;特别麻烦&#xff0c;而且感觉ssh登录AWS的云主机后好卡&#xff0c;这里是更改成用户名和密码的形式登录云主机&#xff0c;可以通过SecureCRT直接登录 1、首先通过ssh登录到EC2&#xff0c;类似于ssh -i…

母版页

一、母版页简介 使用 ASP.NET 母版页可以为应用程序中的页创建一致的布局。单个母版页可以为应用程序中的所有页&#xff08;或一组页&#xff09;定义所需的外观和标准行为。 母版之所以称为母版&#xff0c;就是将大部分网页上固定内容&#xff0c;比如导航栏&#xff0c;版…

openLayers 4 canvas图例绘制,canvas循环添加图片,解决图片闪烁问题

一、问题来源&#xff1a; 接触Openlayers 一段时间了&#xff0c;最近做了一个农业产业系统&#xff0c;项目中涉及到产业图例&#xff0c;最后考虑用canvas来绘制图例图像。当中带图片的图例移动时&#xff0c;图片会实现闪烁留白情况。闪烁是因为绘制图片本身的复杂性&#…

Java DB嵌入式模式

Java DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项&#xff1a; Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌入式模式下&…

清除浮动方法解析

清除浮动方法解析 清除浮动带来的额外影响 如果对于浮动不熟悉的同学&#xff0c;可以看看介绍float的文章。传送门&#xff1a;CSS float 我们知道&#xff0c;在一个父元素内如果遇到某个浮动元素&#xff0c;此时父元素的高度会发生塌陷。针对父元素高度塌陷的问题&#xff…

进程间的通信----管道

前提&#xff1a;本文是基于Linux系统下的学习 用户态的进程是如何组织的呢&#xff1f;所有的用户态进构成了一棵树。进程树。 进程树的树根是init.也就是1号进程。是用户态进程的祖宗进程。如何查看进程树&#xff1f;pstree 进程之间的关系 父子进程和兄弟进程查看进程的信息…

web项目启动时,自动执行代码的几种方式

在项目开发过程中&#xff0c;往往需要一些功能随着项目启动而优先启动&#xff0c;下面我总结几种方式&#xff08;非spring boot&#xff09; spring boot的参考 spring boot 学习之路9 (项目启动后就执行特定方法) 方式一&#xff1a; ServletContextListener监听器&#…

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分&#xff0c;在其中我将提供有关需要应用该模式的情况&#xff0c;它所具有的利弊以及用法示例的信息。 有时&#xff0c;当对象的内部状态更改时&#…

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9)&#xff1a;UI指南 原文:[UWP]了解模板化控件(9)&#xff1a;UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性&#xff0c;用于在新建ControlTemplate时使用这些约定的属性。 譬如&#xff0c;修改HeaderedContentControl的Co…

Java的反射API

如果您曾经问​​过自己以下问题&#xff1a; –“如何在字符串中仅包含其名称的方法调用&#xff1f;” –“如何动态列出类中的所有属性&#xff1f;” –“如何编写一种将任何给定对象的状态重置为默认值的方法&#xff1f;” 然后您可能已经听说过Java的Reflection API…

linux服务器基本常识,服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的&#xff0c;这节就聊点基础的。文件权限操作查看权限Linux中每个文件对每个用户来说都有对应的权限&#xff0c;在任一路径中输入ll就可以查看这些信息&#xff1a;rootip-*** /usr/local # lltotal 32Kdrwxr-xr-x 2 root root 4.0K Jan 14 …

CSS实现单行与多行文字省略(truncation)

在上一篇文章小div布局之卡片堆叠&#xff08;card-stacking&#xff09;中有多行文字溢出省略的效果&#xff0c;这篇文章就对这种效果&#xff08;包括单行文字溢出省略&#xff09;的实现做个简单的记录&#xff0c;以防自己忘记。具体来说&#xff0c;就是要实现这种文字排…

logback配置详解和使用

最近知道一种打印日志的新方法&#xff0c;在此做一下学习总结。 转自&#xff1a;行走在云端的愚公 https://www.cnblogs.com/warking/p/5710303.html 一、logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站&#xff1a; http://logback.qos.ch。它当前…

RAID技术超详细讲解

RAID 技术是一种多磁盘技术&#xff0c;面对数据的各方面有着两面性的影响&#xff0c;整体来说优点大于缺点的&#xff0c;下面我将详细介绍一下 RAID &#xff0c;简称磁盘阵列技术。 一、RAID 概述 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 “A C…

Java安全教程–创建SSL连接和证书的分步指南

在有关应用JEE安全性的系列文章中&#xff0c;我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程。 如我们之前的文章中所述&#xff0c; 安全套接字层&#xff08;SSL&#xff09;/传输层安全性&#xff08;TLS&#xff09;将启用客户端和Web服…

[转]CSS hack大全详解

转自&#xff1a;CSS hack大全&详解 1、什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号&#xff0c;让不同的浏览器识别不同的符号&#xff08;什么样的浏览器识别什么样的符号是有标准的&#xff0c;CSS hack就是让你记住这个标准&#xff09;&#xff0c…

产品经理应该具备的技能(2)如何做一个好的数据产品经理?

一、如何做一个好的数据产品经理&#xff1f; PD&#xff08;指产品经理&#xff0c;下同&#xff09;本身就是在做牛做马&#xff0c;关系圈异常复杂。数据PD也不例外。而且打交道的人更多。以下是我用PPT绘制的数据产品经理关系圈。如果你也做过 数据产品的产品经理&#xff…

Java EE CDI程序化依赖关系消歧示例–注入点检查

在本教程中&#xff0c;我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义。 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除。 在这里&#xff0c;我们将向您展示如何以动态方式避免依赖消除歧义。 我们将通过检查注入另一个…

机器学习算法整理(四)集成算法—随机森林模型

随机&#xff1a;数据采样随机&#xff0c;特征选择随机 &#xff08;数据采样&#xff0c;有放回&#xff09; 转载于:https://www.cnblogs.com/douzujun/p/8386930.html

linux人脸识别视频推流,RTMP推流协议视频智能分析/人脸识别/直播点播平台EasyDSS接口调用注意事项介绍...

TSINGSEE青犀视频目前推出了前端支持不同协议设备接入的视频智能分析平台&#xff0c;包括RTSP协议的EasyNVR、GB28181协议的EasyGBS&#xff0c;RTMP推流协议的EasyDSS&#xff0c;还有能够进行人脸识别、车牌识别的EasyCVR&#xff0c;这些平台均提供了视频转码分发的能力&am…