原型模式之基础

一、是什么?

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(官方定义)

原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:

1.实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。

2.重写Object类中的clone方法。Java中所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。

原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,它的原型类Prototype也常用抽象类来替代。

类型:创建型模式

二、何时用?

有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充又或者创建对象需要读取硬盘文件。

此时,如果已经有了一个对象,再创建对象时,不需要提供专门的new()操作,而是采用复制现有对象的方法,就可以快速完成对象的创建,这无疑是一种非常有效的方式。

三、怎么用?

classPrototype implements Cloneable {
    public Prototype clone(){
        Prototype prototype = null;
        try{
            prototype =(Prototype)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return prototype;
    }
}

class ConcretePrototype1 extends Prototype{
    public void show(){
       System.out.println("原型模式实现类1");
    }
}

class ConcretePrototype2 extends Prototype{
    public void show(){
       System.out.println("原型模式实现类2");
    }
}
publicclass Client {
    public static void main(String[] args){
        ConcretePrototype cp = newConcretePrototype();
        for(int i=0; i< 10; i++){
            ConcretePrototype clonecp =(ConcretePrototype)cp.clone();
            clonecp.show();
        }
    }
}<span style="font-family: SimSun; font-size: 14pt; background-color: rgb(255, 255, 255);"> </span>

四、优缺点:

优点:

1.可以快速创建很多相同或相似的对象,简化对象的创建过程(因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。)

2.保存对象的中间状态

3.扩展性好:动态增加减少产品类。

4.简化了创建结构

缺点:每一个类必须配备一个克隆方法,因此对已有类进行改造比较麻烦,需要修改其源代码,并且在实现深克隆是需要编写较为复杂的代码。

五、总结

以上就是对原型模式基础知识的一个讲解,只有对这些基础知识有了了解才会将它进一步优化,让它发挥更大的价值。那么下一篇就会更深一步的介绍原型模式之浅拷贝和深拷贝。

时间: 2024-10-12 17:30:22

原型模式之基础的相关文章

设计模式(创建型)之原型模式(Prototype Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过

设计模式之原型模式(Prototype)详解及代码示例

一.原型模式的定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象.它属于创建型设计模式,用于创建重复的对象,同时又能保证性能(用这种方式创建对象非常高效). 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆.当直接创建对象的代价比较大时,则采用这种模式.例如,一个对象需要在一个高代价的数据库操作之后被创建.我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用.

面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlog(

JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模)

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现.   工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. ? 1 2 3 4 5 6 7 8

设计模式之原型模式(c++)

问题描述 看到这个模式,很容易想到小时候看的<西游记>,齐天大圣孙悟空发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空, 对付小妖怪很管用(数量最重要). Prototype 模式也正是提供了自我复制的功能, 就是说新对象的创建可以通过已有对象进行创建.在 C++中,拷贝构造函数( Copy Constructor) 曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一. 在GOF的<设计模式:可复用面向对象软件的基础&

游戏开发设计模式之原型模式 &amp; unity3d JSON的使用(unity3d 示例实现)

命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 实现原型模式 原型模式带来的好处就是,想要构建生成任意独特对象的生成类,只需要一个生成类和一个原型即可.当我们有一个抽象的敌人Monster类就有很多继承它的各种各样的敌人,人类.动物.龙等等,如果我们想为每个敌人做一个生成器父类Spawner,也会有与monster对应数量的子类,也许就会这样: 这样就会产生类的数量变多,而且这些类的功能是重复的.开始的spa

设计模式 笔记 原型模式 prototype

//---------------------------15/04/07---------------------------- //prototype 原型模式--对象创建型模式 /* 1:意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2:动机: 3:适用性: 1>当一个系统应该独立于它的产品创建.构成和表示时 2>当要实例化的类是在运行时刻制定时,例如通过动态装载 3>为了避免创建一个与产品类层次平行的工厂类层次时 4>当一个类的实例只能有几个不同状

创业街分店开张啦---原型模式

前情提要 上集讲到, 小光请来堂哥大龙作为自己的代理与饮品供应商谈判, 最终大龙用自己丰富的商场经验帮小光拿到合适的价格. 小光也是尝到了代理的甜头, 开始将店里的更多工作交给表妹来打理, 自己腾出功夫去选新的分店地址了. 所有示例源码已经上传到Github, 戳这里 新店建设 根据光谷店的经营经验, 很快, 小光就选好了分店的地址-创业街. 还是为了造福广大屌丝单身程序猿们啊, 哈哈. 分店的建设相对第一家店的开辟来说也是简单了很多, 在光谷店的探索, 诸如热干面生产流程, 饮料机机制, 活动

设计模式学习-原型模式

1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.类图 3.代码示例 1 package com.zhaoyangwoo.prototype; 2 3 /** 4 * Created by john on 16/5/8. 5 */ 6 public class Prototype { 7 public static void main(String[] args){ 8 Product p1= new Product(); 9 p1.setName("nihao&q