设计模式之禅——原型模式

原创 2016年08月29日 15:28:08

原型模式的定义:不通过new关键字来产生一个对象,而是通过对象复制来实现的模式就叫做原型模式

原型模式的简单程度仅此于单例模式和迭代器模式。

见代码

public class Student implements Cloneable{
    private String classes;
    private String name;
    public void setClasses(String classes){
        this.classes = classes;
    }
    public String getClasses(){
        return this.classes;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }

    public void output(){
        System.out.println("我是" + this.classes + "的" + this.name);
    }

    @Override
    public Student clone(){
        Student studuent = null;
        try{
            studuent = (Student)super.clone();
        }catch (CloneNotSupportedException e){

        }
        return studuent;
    }

    public static void main(String[] args) {
        Student student = new Student();
        student.setClasses("三班");
        student.setName("hms");
        student.output();
        Student student1 = student.clone();
        student.output();
    }
}
/*
我是三班的hms
我是三班的hms
*/

特点

1、实现Cloneable接口,这个接口是JDK自带的,里面没有任何方法。它的作用就是”标示“——告诉虚拟机这个类可以被拷贝
2、重写Object的clone()方法。

原型模式的优点


1、性能优良
原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现优点

2、逃避构造函数的约束。
它不再需要构造函数,这既是它的优点,也是它的缺点

使用场景


1、资源优化场景
类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等

2、性能和安全要求
通过new一个对象要非常繁琐的数据准备或访问权限,则可以使用原型模式

3、一个对象提供给多个修改者
一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑原型模式拷贝多个对象供调用者使用。


注意事项
原型模式是不再执行它的构造函数的!

浅拷贝与深拷贝


浅拷贝是你新拷贝的对象仍然与原对象共享成员变量。这意味着你新拷贝的对象修改之后原有对象的成员变量肯定也会被修改。这些成员变量是 : 非【基本数据类型和String类型】,如ArrayList类型,那么怎么让ArrayList成为深拷贝呢?在clone方法内单独拷贝它,如

this.arrayList = (ArrayList<String>)this.arrayList.clone();


深拷贝就是拷贝了原有对象的所有东西~

版权声明:本文为博主原创文章,未经博主允许不得转载。

读秦小波《设计模式之禅》 -- 工厂模式

设计模式是一种非常有用的编程技巧,它对于代码的重构有些非常重要的作用,对于软件开发人员来说,需要理解并尝试着使用这些设计的方法。      个人感觉《设计模式之禅》这本书中讲解的非常具体,每个模式都配...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2014年12月25日 08:36
  • 2614

设计模式之禅——命令模式

命令模式的定义命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能.例子:项目经理执行任务满足客...
  • TyroneRenekton
  • TyroneRenekton
  • 2016年09月08日 08:56
  • 1086

设计模式之禅——门面模式

门面模式【Facade Pattern】也叫外观模式,是一种比较常用的封装模式,其定义如下:【要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容...
  • TyroneRenekton
  • TyroneRenekton
  • 2017年01月11日 10:30
  • 1153

设计模式——原型模式

  • 2013年08月11日 16:47
  • 4KB
  • 下载

C语言实现《设计模式之禅》——原型模式

#include #include #include /*C语言实现设计模式之禅之原型模式, 类图见p139*/ /*核心思想: 给类中添加一个拷贝自身的函数,在...
  • chengrile
  • chengrile
  • 2014年01月20日 11:41
  • 470

设计模式之禅之 原型模式

  • 2010年04月13日 12:49
  • 245KB
  • 下载

设计模式——原型模式(Prototype)

概念:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝。可以说,拷贝是原型模式的精髓所在。举个现实中的例子来介绍原型模式。找工作的时候,我们需要准备简历。假...
  • koudaidai
  • koudaidai
  • 2012年03月09日 15:48
  • 388

设计模式(对象创建)——原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 场景还原(找工作准备简历):假设没有打印设备,因此需手写简历,这些简历的内容都是一样的。这样有个缺陷,如果要修改简历中的某项...
  • lxy_2011
  • lxy_2011
  • 2017年06月19日 10:58
  • 224

设计模式学习笔记——原型模式

原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。...
  • u011499992
  • u011499992
  • 2016年03月13日 19:39
  • 211

C++设计模式——原型模式

什么是原型模式? 在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头...
  • caoshangpa
  • caoshangpa
  • 2016年10月12日 13:04
  • 246
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之禅——原型模式
举报原因:
原因补充:

(最多只允许输入30个字)