原型模式

Java设计模式—原型模式

瘦欲@ 提交于 2020-03-07 22:17:31
原型设计模式是一种比较简单的设计模式,在项目中使用的场景非常多。 个人理解: 原型模式实现了对Java中某个对象的克隆功能,即该对象的类必须implements实现Cloneable接口来标识为可被克隆,然后需要覆写Object类的clone( )方法。 简单点说就是:实现一个接口重写一个方法就可以实现原型模式。 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 通用类图如下所示: 原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的,为什么说是“标示”呢?翻开JDK的帮助看看Cloneable是一个方法都没有的,这个接口只是一个标记作用,在JVM中具有这个标记的对象才有可能被拷贝。那怎么才能从“有可能被拷贝”转换为“可以被拷贝”呢?方法是覆盖clone()方法,是的,你没有看错是重写clone()方法。 通用源代码也相当简单如下: public class PrototypeClass implements Cloneable{ //覆写父类Object方法 @Override public PrototypeClass clone(){ PrototypeClass prototypeClass = null; try { prototypeClass =

JAVA设计模式之 原型模式【Prototype Pattern】

血红的双手。 提交于 2020-03-07 22:15:44
一、概述: 使用原型实例指定创建对象的种类,而且通过拷贝这些原型创建新的对象。 简单的说就是对象的拷贝生成新的对象(对象的克隆), 原型模式是一种 对象创建型模式 。 二、使用场景: 创建新的对象能够通过对已有对象进行复制来获得,假设是相似对象,则仅仅需对其成员变量稍作改动。 三、UML结构图: 四、參与者 (1) Prototype(抽象原型类):它是声明克隆方法的接口,是全部详细原型类的公共父类,能够是抽象类也能够是接口,甚至还能够是详细实现类。 (2) ConcretePrototype(详细原型类):它实如今抽象原型类中声明的克隆方法。在克隆方法中返回自己的一个克隆对象。 (3) Client(客户类):让一个原型对象克隆自身从而创建一个全新的对象。 五、用例学习: 1、抽象原型类:Prototype.java /** * 抽象原型类 * @author lvzb.software@qq.com * */ public abstract class Prototype { /** * 提供抽象克隆方法 */ public abstract Prototype clone(); } 2、详细原型类:ConcretePrototypeA.java /** * 详细原型类A * @author lvzb.software@qq.com * */ public class

理解javascript中的原型模式

你说的曾经没有我的故事 提交于 2020-03-05 07:06:06
一、为什么要用原型模式。 早期采用工厂模式或构造函数模式的缺点: 1.工厂模式: 函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂模式尽管解决了创建多个相似对象的问题,却没有解决对象识别的问题(返回的是自定义的一个对象o,不明确对象o的类型)。 2. 构造函数模式: 构造函数的调用和其他oo语言一样,用new操作符来构建一个Person的实例;javascript中的构造函数也是函数(所以也可以直接像普通函数那样直接调用方法名)只不过可以用来创建对象,这是和其他oo语言不一样的地方(其他oo语言的构造函数不是函数,不能直接调用方法名,必须用new操作符来创建对象才可以),相同点是构造函数首字母都要大写,非构造函数首字母都是小写。 构造函数模式解决了创建多个相似对象的问题和对象识别的问题,但是不足的地方是,采用这种模式会创建多个完成同样任务的Function实例。 拿上面的例子来分析内存: 此时person1.isName===person2.isName 是为false的 不同实例上的同名函数是不相等的,我们希望有一种方法,即可以解决创建多个相似对象的问题和对象识别的问题,还能让每个实例共享相同的方法。 上面的例子可以做改进将方法提到构造函数的外面,单独写成一个全局函数,this.isName指向一个指针:

图解Java设计模式之原型模式

一世执手 提交于 2020-03-04 07:52:03
图解Java设计模式之原型模式 克隆羊的问题 原型模式 - 基本介绍 原型模式在Spring框架中源码分析 浅拷贝的介绍 深拷贝基本介绍 克隆羊的问题 现在有一只羊tom,姓名为 : tom,年龄为 :1,颜色为 :白色,请编写程序创建和tom羊属性完全相同的10只羊。 传统方式解决克隆羊的问题 package com.example.demo.prototype; public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); this.name = name; this.age = age; this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return

原型模式-Go

喜欢而已 提交于 2020-03-03 19:23:54
原型模式 描述 原型模式的目标是在 编译期 就获得一个或一系列可以在 运行期 无限次克隆的对象。比如用户注册时的默认模板或者某些服务的默认价格方案。原型模式与建造者模式最大的不同点在于,原型模式获取的对象时克隆出来的而不是在运行时建造出来的。也可以使用一个类似缓存的解决方案,用原型存储信息。 目标 原型设计模式的主要目标是避免重复创建对象。 想象一下一个默认的对象,它由几十个字段和嵌入的类型组成。 我们不想每次使用对象时都编写这种类型所需的所有内容,特别是如果我们可以通过创建具有不同基础的实例来弄乱它的话: 维护一组将被克隆以创建新实例的对象 提供某种类型的默认值以在其上开始工作 释放复杂对象初始化的CPU以占用更多的内存资源 例子 实现一个衬衣商店,里面有一些衬衣(包括默认的颜色和价格)。所有衬衣都会有库存,还有一个系统去维护商品存放的地址。 我们使用衬衣的原型,每次我们需要一个新衬衣时,就将此原型拿出来,克隆和使用。 要具有衬衫克隆对象和接口来查询不同类型的衬衫(分别为15.00、16.00和17.00美元的白色,黑色和蓝色衬衫) 当您要求一件白衬衫时,必须制作一件白衬衫的副本,并且新实例必须与原始实例不同。 创建的对象的SKU不应影响新对象的创建 信息方法必须为我提供实例字段上的所有可用信息,包括更新的SKU type ItemInfoGetter interface {

23种设计模式之原型模式

拟墨画扇 提交于 2020-03-03 09:16:08
原型模式的定义 定义: 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象. 通俗的讲,就是不再使用new 来创建对象, 而改用 clone 方法来得到新的对象 原型模式的核心是一个 clone 方法, 通过该方法进行对象的拷贝, Java提供了一个Cloneable接口来标识这个对象是可拷贝的,为什么说是"标识" 呢? 翻开JDK的帮助看Cloneable是一个方法都没有的, 这个接口只是一个标记作用,在JVM中具有这个标记的对象才有可能被拷贝. 如何从"有可能被拷贝" 转换成"可以被拷贝"呢?方法是覆盖 clone 方法. 原型模式的通用代码: 原型模式的应用 原型模式的优点 性能优良. 原型模式是在内存二进制流的拷贝, 要比直接new 一个对象性能好很多, 特别是要在一个循环体内产生大量的对象时, 原型模式可以更好的体现其优点 逃避构造函数的约束. 这既是它的优点也是缺点, 直接在内存中拷贝, 构造函数是不会执行的. 优点是减少了约束, 缺点也是减少了约束, 需要在实际应用时考虑 原型模式的使用场景 资源优化场景. 类初始化需要消化非常多的资源, 这个资源包括数据、硬件资源等 性能和安全要求的场景. 通过new产生一个对象需要非常繁琐的数据准备或访问权限, 则可以使用原型模式 一个对象多个修改者的场景. 一个对象需要提供给其它对象访问,

原型模式

走远了吗. 提交于 2020-03-03 05:09:56
本文章转载:https://blog.csdn.net/u014337397/article/details/80387482 原型模式 作用:用原型实例来指定出创建对象的总类,并且通过拷贝这些原型来创建新的对象。 使用场景: 当一个系统应该独立于它的产品创建、构成和表示的时候 当要实例化的类是在运行时刻指定的时候,如通过动态加载 为了避免创建一个与产品类层次平行的工厂类层次时 当一个类的实例只能有几个不同状态组合中的一种时 代码实现 # include <iostream> # include <string> # include <list> using namespace std ; //产品类 class Computer { public : void SetBrandName ( string brandName ) //设置品牌 { this - > m_BrandName = brandName ; } void SetCpu ( string cpu ) //设置CPU { this - > m_Cpu = cpu ; } void SetMemory ( string memory ) //设置内存 { this - > m_Memory = memory ; } void SetVideoCard ( string videoCard ) //设置显卡 {

prototype pattern原型模式

两盒软妹~` 提交于 2020-02-28 07:27:10
定义 原型模式是一种非常简单的是模式,属于创建型设计模式的一种。原型模式(Prototype)即应用于“复制”操作的模式,此模式最初定义在《设计模式》(Addison-Wesley,1994),定义为: “ 使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象 ” 。简单来理解就是根据这个原型创建新的对象,这种创建是指深复制,得到一份新的内存资源,而不是一个新的指针引用。我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑对于快速的创建一个新的对象是一种非常有效的方式。 结构 原型模式结构如下页上图所示: 客户(Client):使用原型对象的客户程序,客服端知道抽象的Prototype类 抽象原型(Prototype):规定了具体原型对象必须实现的接口(如果要提供深拷贝,则必须具有实现clone的规定) 具体原型(ConcretePrototype):从抽象原型派生而来,是客户程序使用的对象,即被复制的对象。此角色需要实现抽象原型角色所要求的接口。 Prototype类中包括一个Clone方法,Client知道Prototype,调用其复制方法clone即可得到多个实例,不需要手工去创建这些实例。

JavaScript设计模式样例七 —— 原型模式

限于喜欢 提交于 2020-02-27 15:10:36
原型模式(Prototype Pattern) 定义:用于创建重复的对象,同时又能保证性能。目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。场景:在运行期建立和删除原型。 let productPrototype = { init: (type) => { this.type = type }, getType: () => { return this.type } } let prototype = (type) => { function F () { } F.prototype = productPrototype let f = new F() f.init(type) return f } let car = prototype('丰田CHR') console.log(car.getType()) Git地址: https://github.com/skillnull/Design-Mode-Example 来源: https://www.cnblogs.com/Man-Dream-Necessary/p/12372165.html

原型设计模式

瘦欲@ 提交于 2020-02-27 14:23:14
一、定义 原型设计模式:实现对原对象的拷贝,这里实现的事深拷贝,就是拷贝了原对象之后,即使原对象修改或者内存释放了,都不会对副本有影响,因为副本有自己独立的内存空间。 二、代码实现 三、测试代码 四、运行结果 来源: CSDN 作者: Amber_LYP 链接: https://blog.csdn.net/weixin_44603985/article/details/104532074