设计模式:原型模式

2023-09-12 21:01:06

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需通过实例化类来创建。原型模式允许我们通过复制现有对象的属性和方法来创建新的对象,从而避免了直接创建对象的开销。
在原型模式中,有以下几个主要角色:

  1. 原型(Prototype):定义了复制自身的方法。
  2. 具体原型(Concrete Prototype):实现了原型接口,实现了复制自身的方法。
  3. 客户端(Client):使用原型对象来创建新对象。

代码实现

interface Prototype {
    Prototype clone();
    void display();
}
// 具体原型类
class ConcretePrototype implements Prototype {
    private String name;
     public ConcretePrototype(String name) {
        this.name = name;
    }
     @Override
    public Prototype clone() {
        return new ConcretePrototype(this.name);
    }
     @Override
    public void display() {
        System.out.println("ConcretePrototype: " + this.name);
    }
}
// 客户端
public class Main {
    public static void main(String[] args) {
        // 创建原型对象
        Prototype prototype = new ConcretePrototype("Prototype 1");
        // 克隆原型对象
        Prototype clone = prototype.clone();
        // 显示原型对象和克隆对象
        prototype.display(); // 输出:ConcretePrototype: Prototype 1
        clone.display(); // 输出:ConcretePrototype: Prototype 1
    }
}

总结

原型模式的优点:

  1. 提高了对象的创建效率:通过复制现有对象来创建新对象,避免了直接创建对象的开销。
  2. 简化了对象的创建过程:客户端只需要通过复制原型对象来创建新对象,无需关心具体的创建细节。
  3. 可以动态添加和删除原型:可以在运行时动态地添加或删除原型对象,灵活性高。

原型模式的缺点:

  1. 原型模式的缺点是需要为每个类都实现原型接口或者继承自一个统一的原型类,增加了系统的复杂性。

总结来说,原型模式适用于创建成本较高的对象,通过复制现有对象来创建新对象,提高了对象创建的效率。它可以简化对象的创建过程,并且可以动态地添加或删除原型对象。

更多推荐

jupyter notebook找不到python内核(kernel)的解决记录

文章来源:jupyternotebook找不到python内核(kernel)的解决记录–WhiteNight'sSite貌似导致这个问题的原因有非常多,这里只是说一个可能的解决方法。前情提要:在费了九牛二虎之力,终于安装成功了jupyternotebook,并能创建python3文件后,我又发现了新的问题:它找不到k

文盘 Rust -- tokio 绑定 cpu 实践

tokio是rust生态中流行的异步运行时框架。在实际生产中我们如果希望tokio应用程序与特定的cpucore绑定该怎么处理呢?这次我们来聊聊这个话题。首先我们先写一段简单的多任务程序。usetokio::runtime;pubfnmain(){letrt=runtime::Builder::new_multi_th

为何学linux及用处

目前企业使用的操作系统无非就是国产类的,windows和linux类。我们要提升自己的技能,需要学习这两款。我记得在大学时期,学习过windows以及linux,但当时觉得又不常用,就学的模棱两可。毕业之后,你会发现,其实这两种操作系统是很主流的。为什么学?下面就是一些工作中遇到的例子分享一下。我记得在企业中有次遇到数

Unix后记&寻找Shen Lin

看『左耳朵耗子』这篇UNIX50年:KENTHOMPSON的密码[1],意外获知KEN,DMR,RMS之外,能够拥有三位字母简称,且在极客圈中得到广泛认可的另一位大神——BWK。同样是贝尔实验室出来的研究员,当初跟着K&R开发unix。另外,awk中的“k”,那本C语言经典<C程序设计语言>作者K&R中的“k”,均指此

【Linux is not Unix】Linux前言

目录二战军工的产物——第一台现代电子数字计算机ENIAC(埃尼阿克)UnixLinuxLinux企业应用现状如今计算机已经应用在我们生活的各个层面,像我们日常使用的笔记本是计算机的一类,可以解决我们生活中遇到的很多问题,我们只是进行简单的操作就可以运行我们的计算机得到我们的答案的这其中的操作究竟有什么奥秘?这还得从计算

jvm-sandbox-repeater时间mock插件设计与实现

一、背景jvm-sandbox-repeater实现了基础的录制回放流程编排,并简单的给了几个插件的demo,离实际项目运用其实还需要二次开发很多东西,其中时间mock能力是一个非常基础的能力,业务代码里经常需要用到这块;二、调研2.1如何mock当前时间我们mock的主要是"当前时间",java里获取当前时间的主要方

【CSS】font-weight设置为500显示不出加粗效果

问题出在操作系统上:macOS系统默认的华文黑体(STHeiti)有七个矢量级别:Heavy/Bold/MediumP4/Regular/Thin/Light/UltraLightP2,它包含上面CSS中设定的500这个精度。Windows系统默认的宋体(simsun)没有那么多级别。在缺少级别支持的前提下,CSS会根

【笔记】简单算法查找、排序的思路和优化

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、二分查找1、思路2、初步代码复现3、整数溢出的情况如图:中间索引上的值+右边界索引上的值会造成`

成为绝地求生高手的秘密武器,精准作图、库存查询与封禁防护一网打尽!

想要在绝地求生中成为巅峰玩家,除了优秀的游戏技巧和战斗意识外,还需要掌握一些绝密武器,帮助你科学作图、查询库存,甚至保护账号不被骗和封禁。下面就为你揭秘,让你轻松提升战斗力,引领游戏潮流!首先,作图工具是每个高手必备的利器之一。我们网站提供一系列方便作图的工具推荐,可以轻松绘制战术图和战场布局,帮助你与队友默契配合,制

MiniGPT-4:用高级大型语言模型增强视觉-语言理解

文章目录摘要1、简介2、相关工作3、方法3.1、第一个预训练阶段3.2、策划高质量的视觉语言域对齐数据集。3.3、第二阶段微调4、演示:5、局限性摘要论文链接:https://arxiv.org/pdf/2304.10592v1.pdf最近的GPT-4展示了非凡的多模态能力,例如从手写文本直接生成网站和识别图像中的幽默

JS 手写call、apply和bind方法

手写call、apply和bind方法一、方法介绍1.1call方法1.2apply方法1.3bind二、方法的实现2.1call方法2.2apply方法2.3bind方法一、方法介绍apply、call和bind都是系统提供给我们的内置方法,每个函数都可以使用这三种方法,是因为apply、call和bind都实现在了

热文推荐