原型模式

设计模式之原型模式

蓝咒 提交于 2019-11-29 08:34:09
1、生活中的原型模型   生活中,快速复制,十分常见,比如小时候考试的印刷机,先通过刻版,下一步,以刻版或母版为基础进行大批量印刷。这样能快速的创建一批符合要求的对象。   变成中也十分常见,常见的有通过拷贝自身属性快速创建另一个对象。各个对象之间是相互独立的(内存空间地址不一致), 2、浅克隆、深克隆   浅克隆,即通过实现Cloneable标记接口(空接口),在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。在Java语言中,通过覆盖Object类的clone()方法可以实现浅克隆。    @Data public class WeeklyLog implements Cloneable { private String name; private String date; private String content; private Attachment attachment; @Override public WeeklyLog clone(){ Object obj = null; try { obj = super.clone(); return (WeeklyLog) obj; } catch

设计模式之原型模式

落爺英雄遲暮 提交于 2019-11-29 08:30:33
一.定义 原型模式:原型模式用于创建重复的对象,实现对象的拷贝。这种模式类似于创建型模式,提供了创建对象的最佳模式。 这种模式存在的应用场景在于,能够复制当前对象,实现对象数据的克隆。比如:如果一个对象的数据需要经过较高代价的数据库操作,采用原型模式能够较好的缓存当前对象,减少数据库的访问量。 二.使用场景 思想:用实例对象,指导对象的创建工作. 应用:1.一个复杂的对象,包含多种数据和结构,层次较深时,适用与原型模式(当需要创建一个与复杂对象部分数据相同的对象) 2.当复杂对象需要独立于系统运行,而不破坏本系统中的结构 实例场景:1.一个楼盘有名称,地址和施工队三个成员变量。施工队有名称,人数和包工头。包工头有名称和年龄。现在要建设一个隔壁的楼盘,还是由这个施工队进行建设的,只是地址不同。 如果重新创建,过程较为复杂,费时费力,采取原型模式可以快速构建一个新的楼盘 2.系统中已经有一架飞机,飞机有名称和型号和厂商。厂商有名称,地址和负责人。负责人有姓名和年龄。现在要一家相同的飞机由不同的负责人进行指导生产的,如何快速创建这样的对象。 三.优缺点 优点:1.快速创建复杂对象实例 2.逃避构造函数约束 缺点:1.引用含有循环引用如何处理 2.必须实现Cloneable接口 下面是一张UML图用来说明原型模式的关系 下面是一个具体的应用场景:

设计模式简介及常用应用场景

有些话、适合烂在心里 提交于 2019-11-28 12:48:42
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 常用应用场景: 工厂模式 :IOC就是典型的工厂模式 代理模式 :AOP就是代理实现的 Facade模式 :shiro框架的核心 单例模式 Spring默认就是单例 不变模式 string 八大基本数据类型都是单例 Future 模式 异步调用。即请求时只拿到一个契约,约定以后可以获取这个东西 来源: https://www.cnblogs.com/duguangming/p/11407721.html

项目进展05

孤者浪人 提交于 2019-11-28 08:16:38
今日工作   检查了几遍墨刀做的项目原型,下午在院办做了演示报告   学习了小程序的一些组件的使用,表单组件,导航 ,多媒体,画布等 明日计划   明天开始要着手写代码了,准备先仔细研究一下网上下载的代码,然后把主要页面的结构搭建起来。继续看视频教程学习小程序开发。 总结   在今天的演示报告中,老师给我们提出了很多意见,让我们认识到了项目有很多的不足之处。在后面的编码中要改掉首页仅显示选择食堂的模式,将菜品更直观地展示在用户的面前;还要考虑到用户下单之后接单方的处理;支付方式考虑改为货到付款。 来源: https://www.cnblogs.com/Ljy02/p/11400850.html

设计模式-原型模式详解

て烟熏妆下的殇ゞ 提交于 2019-11-28 01:43:33
一、原型模式的概念   原型模式是软件开发中的创建型设计模式。当要创建的对象类型由原型实例确定时使用它,该实例被克隆以生成新对象。   此模式用于   1、避免客户端应用程序中的对象创建者的子类,如工厂方法模式。   2、避免以标准方式创建新对象的固有成本(例如,使用'new'关键字),当它对于给定的应用程序来说过于昂贵时。   上述定义来自 wiki ,简单来说, 就是创建一个全新的对象代价太高时,比如耗时太长时,能直接从现有实例中以较小的代价克隆出一个对象。 二、原型模式的实现   实现原型模式的方式之一为克隆,下面我们来实现一下   1、先定义一个抽象原型,包含两个克隆的虚方法(方便子类重写) namespace PrototypePattern { using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public abstract class AbstractPrototype { /// <summary> /// 浅克隆 /// <remarks>使用objectMemberwiseClone</remarks> /// </summary> /// <returns>当前对象副本</returns> public

java设计模式---原型模式

一笑奈何 提交于 2019-11-27 23:52:44
原型模式也是创建型的设计模式,通过拷贝原型创建新的对象,理解原型模式必须理解java中的浅复制和深复制。复制也称为克隆。 会发生深拷贝的有java中的8中基本类型以及他们的封装类型,另外还有String类型。其余的都是浅拷贝。 浅克隆:浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。 深克隆:深克隆不仅克隆所考虑的对象,也克隆它所引用的对象。 它的核心是就是原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。实现一个接口,重写一个方法即完成了原型模式。 实现类 class Prototype implements Cloneable { public Prototype clone(){

设计模式笔记--原型模式

﹥>﹥吖頭↗ 提交于 2019-11-27 23:36:39
常用设计模式有23中,分为: 创建型模式(主要用于创建对象) 1、单例模式 2、工厂方法模式 3、抽象工厂模式 4、建造者模式 5、原型模式 行为型模式 (主要用于描述对象或类是怎样交互和怎样分配职责) 1、模板方法模式 2、中介者模式 3、命令模式 4、责任链模式 5、策略模式 6、迭代器模式 7、观察者模式 8、备忘录模式 9、访问者模式 10、状态模式 11、解释器模式 结构型模式(主要用于处理类或对象的组合) 1、代理模式 2、装饰模式 3、适配器模式 4、组合模式 5、外观模式(门面模式) 6、享元模式 7、桥梁模式 原型模式 其定义如下: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对 象 原型模式的核心是一个clone方法,通过该方法进行对象的拷贝 , Java 提供了一个Cloneable 接口来标示这个对象是可拷贝的 需要覆写了Object类中的clone方法! 实现一个接口,然后重写clone方法,就完成了原型模式! <span style="font-size:18px;"><span style="font-size:18px;">代码清单13-7 原型模式通用源码 public class PrototypeClass implements Cloneable{ //覆写父类Object方法 @Override public

java设计模式—原型模式

杀马特。学长 韩版系。学妹 提交于 2019-11-27 23:36:20
定义与结构 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式的结构: 1) 客户角色:让一个原型克隆自己来得到一个新对象。 2) 抽象原型角色:实现了自己的 clone 方法,扮演这种角色的类通常是抽象类,且它具有 许多具体的子类。 3) 具体原型角色:被复制的对象,为抽象原型角色的具体子类。 源代码: class PrototypeManager { private static PrototypeManager pm; private Map prototypes= null ; private PrototypeManager () { prototypes= new HashMap(); } //使用单例模式来得到原型管理器的唯一实例 public static PrototypeManager getManager () { if (pm== null ) { pm= new PrototypeManager(); } return pm; } public void register (String name , Object prototype) { prototypes.put(name , prototype); } public void unregister (String name) { prototypes.remove

设计模式:原型模式(C++)【克隆羊多莉】

别来无恙 提交于 2019-11-27 23:35:43
原型模式介绍 这节我们继续学习设计模式——原型模式。我们先看看原型模式的标准说法, 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象 。 其实原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节而已 。 我们 先看看C++和其他一些面向对象的编程语言的区别 。 在java、C# 或者一些其他的面向对象编程语言,他们所有的类都是都会继承或者间接继承Object类 。比如说java中Object类 有一个clone方法,实现上就是原型模式的体现,子类需要根据情况进行实现罢了。而 我们的C++呢 没有Object(上帝类),所以呢 我们需要在我们自己的原型类中添加一个clone 克隆方法就行了 。有人或许会说, C++不是有拷贝构造函数么。确实有默认的拷贝构造函数呀,但是 默认的拷贝构造函数只提供基本的值拷贝 ,如果有在堆区开辟空间的成员呢? 所以我们要提供自己的拷贝构造函数进行深拷贝,方便用户,还应该提供一个clone方法(实际就是去调用拷贝构造函数) 。下面看 原型模式克隆羊多莉 案例 。 克隆羊多利代码实现 原型图就是不画了吧,就一个类。。。。 对外提供clone方法,如果类成员有在堆区开辟空间,需要重新拷贝构造函数进行深拷贝!clone方法本质还是调用拷贝构造函数 。注意,我们的 析构函数要释放堆区开辟的内容 哟。 #define _CRT

设计模式-原型模式

北城余情 提交于 2019-11-27 23:35:18
原型模式 原型模式是23种设计模式之一,和单例模式一样,相对其他设计模式较为容易理解。 定义 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。[1] 原型模式通过克隆一个已经存在的对象实例来返回新的实例,而不是通过new去创建对象,多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效。在Java中,复制对象是通过原型对象实现 Cloneable接口 ,重写 clone()方法 实现的 在实际开发中我们也经常使用克隆方法,下面是我在工作中遇到的案例,业务非常的简单 业务需求: 要求对数据的update,modify,delete的操作,都需要备份原始数据,提高业务的容错性 解决方案: 操作数据前先根据主键或唯一字段查出数据,再用BeanUtils.copyProperties(source, target)方法克隆出一个新的类 注:这里我们调用了BeanUtils中的copyProperties(source, target)方法来进行数据的复制。当然你也可以使用原始的get和set的方法进行数据的复制,但是当类中的字段相当庞大时,原始的办法就显得相当的繁琐。