设计模式 原型模式_设计模式:原型

设计模式 原型模式

创新设计模式之一是原型设计模式 。 尽管原型是创造模式,但它在概念上与其他模式有所区别。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 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/348376.shtml

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

相关文章

oracle回滚事务的关键字,Oracle ROLLBACK语句(回滚事务)

Oracle ROLLBACK语句(回滚事务)在Oracle中&#xff0c;ROLLBACK语句可以用来撤销当前事务或有问题的事务。本教程就将教大家如何使用ROLLBACK语句。ROLLBACK语法ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name | FORCE string ];参数WORK&#xff1a;可选的。 它被Oracle添…

借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier

在本周的re&#xff1a;Invent大会上&#xff0c;AWS宣布了很多很棒的事情。 您应该检查一下他们的页面 &#xff0c;以了解他们正在做的所有新工作的概况–内容很多&#xff0c;而且其中很多似乎立即有用。 如果您想了解更多信息&#xff0c;我的同事凯利安德鲁斯&#xff08;…

oracle sql文字列函数,Oracle 数据库SQL中 decode()函数简介

decode()函数简介&#xff1a;主要作用&#xff1a;将查询结果翻译成其他值(即以其他形式表现出来&#xff0c;以下举例说明)&#xff1b;使用方法&#xff1a;Select decode(columnname&#xff0c;值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)From talbenameWhere …其中…

oracle sysnonym,Oracle权限

oracle的权限 oracle的权限一、权限概述权限是用户对一项功能的执行权力。在Oracle中&#xff0c;根据系统管理方式不同&#xff0c;将权限分为系统权限与实体权限两类。系统权限是指是否被授权用户可以连接到数据库上&#xff0c;在数据库中可以进行哪些系统操作。而实体权限是…

java 8 lambda_Java 8 Lambda演练

java 8 lambda在工作中&#xff0c;我进行了有关Java 8项目lambda的演示&#xff0c;当然还提供了一些简单的代码来说明一些要点。 Java 8的总体原因是&#xff1a; 更简洁的代码&#xff08;适用于只有一种方法和集合的类&#xff09;。 “我们希望代码阅读者在到达lambda表达…

Php的定界符有哪些了,php中定界符

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼PHP中定界符解析定界符写法如下&#xff1a;echo <<这里可以随便放些什么字符&#xff01;HTML; 实现效果&#xff1a;1.PHP定界符的作用就是按照原样&#xff0c;包括换行格式什么的&#xff0c;输出在其内部的东西&#xf…

在JDK 11中启动单文件源代码程序

JEP 330 –启动单文件源代码程序是即将发布的JDK 11&#xff08;18.9&#xff09;发行版中令人兴奋的功能之一。 此功能允许直接使用java解释器执行Java源代码。 源代码在内存中编译&#xff0c;然后由解释器执行。 限制是必须在同一文件中定义所有类。 对于刚开始学习Java并想…

oracle元字符,正则表达式元字符

[more]1、正则表达式中的元字符元字符 意思 例子说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配) n 匹配换行符匹配( 匹配 () 匹配 )^ 匹配字符串的开头位置 如果A是字符串的第一个字符&#xff0c;^A 匹配 A$ 匹配字符串的末尾位置 如果B是字符串…

Packt和Java Code Geeks提供的$ 5 Java编程书籍!

您好极客&#xff01; 今天&#xff0c;我们为您带来一些激动人心的消息&#xff01; Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说&#xff0c;Java仍然是最强大的选择之一&#xff0c;它是定义企业和移动设备的语言。 本周&#xff0c;我们…

oracle12c 端口查看,Oracle12c修改端口号

Oracle12c数据库更改端口号修改端口号的整体步骤1.1、查看当前监听的状态1.2、停止监听1.3、修改监听文件的端口号1.4、修改初始化参数local_listener1.5、重启监听器1.6、修改完毕&#xff0c;使用新端口登录测试实践步骤&#xff1a;1、查看当前监听的状态[oraclelocalhost ~…

源码时代php中级项目,0526PHP班中级项目评比圆满落幕

为了充分发掘同学们开发项目的成功经验&#xff0c;全面提升学员的综合素质&#xff0c;锻炼学员的解说与问题处理能力&#xff0c;源代码教育(源码时代)重庆校区进行了PHP就业班的中级项目评比。项目评比分为演讲、质询、点评及投票评分几个环节&#xff0c;每个环节都精彩纷呈…

SpringHibernate4

1.概述 本文将重点介绍如何使用Spring设置Hibernate 4 –我们将研究如何使用Java和XML配置来使用Hibernate 4配置Spring 3。 当然&#xff0c;该过程的某些部分对于Hibernate 3文章是通用的 。 2. Maven 要将Spring Persistence依赖项添加到项目pom.xml中 &#xff0c;请参阅专…

qt linux 添加库文件路径,linux下qt使用第三方库的那些事

开发库查看工具&#xff1a;$sudo apt-get install pkg-config很多时候我们并不知道自己电脑有没有这个库&#xff0c;所以我们可以使用这个工具来查看自己有哪些工具&#xff0c;或者哪些工具没有。同时&#xff0c;qmake是对这个工具配置支持的&#xff0c;所以我们很多时候很…

xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...

有位朋友因为想在linux中熟悉下hadoop的配置开发环境&#xff0c;所以就开始于WinXP系统中安装fedora linux双系统&#xff0c;可是操作了很久都没成功。这该如何怎么办呢&#xff1f;接下来&#xff0c;小编就给大家介绍WinXP安装fedora linux双系统的具体方法。1.下载Fedora-…

solr 的maven_使用Maven运行Solr

solr 的maven使用Maven运行Solr Solr是一个开源搜索服务器&#xff0c;它是使用Lucene Core的索引和搜索功能构建的&#xff0c;它可以用于使用几乎任何编程语言来实现可扩展的搜索引擎。 尽管Solr具有许多优点&#xff0c;但建立一个开发环境并不是其中之一。 这篇博客文章描…

linux指定内核位置,ARM linux内核启动时几个关键地址

1. 内核启动地址ZTEXTADDR解压代码运行的开始地址。没有物理地址和虚拟地址之分&#xff0c;因为此时MMU处于关闭状态。这个地址不一定时RAM的地址&#xff0c;可以是支持读写寻址的flash等存储中介。Start address of decompressor. heres no point in talking about vi…

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)

Intel 通过在处理器上把管脚数从 32 增加到 36&#xff0c;以提高处理器的寻址能力&#xff0c;使其达到 2^3664GB&#xff0c;然而线性地址的位数仍然是 32 位&#xff0c;为此&#xff0c;需引入一种新的分页机制。从pentium pro 处理器开始&#xff0c;intel引入一种叫做 PA…

java嵌入式db_Java DB嵌入式模式

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

内存属于linux文件吗,linux下的/dev/shm是什么? 内存 文件系统

linux下的/dev/shm是什么&#xff1f;/dev/shm/是linux下一个目录&#xff0c;/dev/shm目录不在磁盘上&#xff0c;而是在内存里&#xff0c;因此使用linux /dev/shm/的效率非常高&#xff0c;直接写进内存。我们可以通过以下两个脚本来验证linux /dev/shm的性能&#xff1a;[r…

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘&#xff0c;SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快&#xff0c;更是大块人心!然而&#xff0c;SSD固态硬盘已经可以完全取代机械硬盘了吗&am…