`
顺先兄是X怪盗
  • 浏览: 9348 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java原型设计模式

阅读更多

原型设计模式

 

一:首先我们先了解什么是设计模式?

设计模式:代码编写方法,模板,规范……每种设计模式都有它使用的场景,在这种场景下使用设计模式会给我们的程序编写带来极大的方便和性能的优越。

java语言里面有23中设计模式,原型设计模式就是其中的一种。不同的设计模式有不同的特点和用法。

二:原型设计模式:

原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的实例。也就是通过复制现在已经存在的对象来创建一个新的对象。

原型设计模式使用的场景:

1,例如我们需要创建一个类的很多对象时

              我们通常的做法是创建一个类,然后再创建这些对象。然而原型设计模式使得我们可以设计出原型模式,然后用这个类去继承原型模式,然后再实例化一个这个类的对象,然后直接用这个对象类复制出其他的对象。这么做的好处在什么地方呢?答案是:我们new一个对象时的程序花费是非常昂贵的(时间的花销上),而使用原型设计模式后第一个对象创建后会保存在内存里面,然后通过复制这个对象的属性,把这些属性赋给另一个对象,这是非常节约时间的(操作的是内存里面的数据)。

2,例如我们需要创建一个类的很难创建的一些对象时

              什么是很难创建的对象呢?当然从表面上是需要传入很多个参数的那种;其实还有创建对象时调用的构造方法里有很多操作的,例如构造方法里面又调用这个类的方法,这就造成时间上的花销。以上的多个参数对象的创建,我们编写代码时每次都得传入参数,是很麻烦的,而时间花销太多是程序设计不能忍的。

原型设计模式当然还用别的用处,读者自己去发展了……

 三:原型设计模式的实现

       原型设计模式的灵魂在于:用一个已经存在的对象,复制后创建另一个对象。复制,在内存里面操作数据。

       知道这些后原型设计模式的实现就变的简单了,这是因为java里面的每一个类都一个clone()方法,这个方法object类有的,方法clone()就是克隆,也就是复制的作用。当然原型设计模式还是有其他不用clone()就实现的,但是使用clone()方法来实现是最简单的了……

//以下就是实现原型设计模式的方法:

 

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

 

  //现实中我们要使用其对象的类:

 

public class TestA extends Tester{
	int a;
	int b;
	int c;
	int a1[];
	public TestA(int a,int b,int c){
			this.a=a;
			this.b=b;
			this.c=c;
			init1();
			init2();
			init3();
		}
	private void init3() {
		System.out.println("方法一");
	}
	private void init2() {
		System.out.println("方法二");
	}
	private void init1() {
		System.out.println("方法三");
	}
}

 

 //使用的地方:

public class TestB {
	static long start1,end1,start2,end2;
	
	public static void main(String[] args) {
		int a=1;
		int b=2;
		int c=3;
		start1=System.nanoTime();
		//new一个对象
		TestA t=new TestA(a,b,c);
		for(int i=0;i<1000;i++){
			TestA t1=(TestA)t.clone();
		}
		end2=System.nanoTime();
		System.out.println("创建这些对象的时间是:"+(end2-start1));
	
	}
}

 

 //不用原型设计模式的代码

public class MyTest {
	
	private static long end2;
	private static long start1;
	int a;
	int b;
	int c;
	static int a1[];
	public MyTest(int a,int b,int c,int [] a1){
		this.a=a;
		this.b=b;
		this.c=c;
		this.a1=a1;
		init1();
		init2();
		init3();
	}
	private void init3() {
	System.out.println("方法一");	
	}
	private void init2() {
		System.out.println("方法二");
	}
	private void init1() {
		System.out.println("方法三");
	}
	//main()
	public static void main(String[] args){
		int a=1;
		int b=2;
		int c=3;
		a1=new int [100];
		start1=System.nanoTime();
		//new一个对象
		MyTest t=new MyTest(a,b,c,a1);
		
		for(int i=0;i<1000;i++){
			MyTest t1=new MyTest(a,b,c,a1);
		}
		end2=System.nanoTime();
		System.out.println("创建这些对象的时间是:"+(end2-start1));
	}	
	public void init4() {
		
	}
}

 

 //在这里我们可以看到时间上的优势

 

四:使用原型设计模式时因注意的地方:

     a.对任何的对象x,都有:x.clone() != x,即克隆对象与原对象不是同一个对象。

  b.对任何的对象x,都有:x.clone().getClass() == x.get getClass(),即克隆对象与原对象的类型是一样的。   

   c.如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的

 

五:深拷贝,浅拷贝。

    在以上的实现原型设计模式的代码中的clone()只能复制8种基本数据类型(浅),其他的数据类型需要自己去写出拷贝(深)。

public Tester clone(){
Tester prototype = null;
  try{
  prototype = (Tester)super.clone();
  //如果对象里面有其他的数据类型,在此处可以自己写下要复制的那些数据类型。
    }catch(CloneNotSupportedException e){
   e.printStackTrace();
  }
  return prototype;
}

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    JAVA设计模式(java设计)

    Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...

    java设计模式pdf

    ### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...

    设计模式示例代码(java)

    设计模式示例代码(java)设计模式示例代码(java)v设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)...

    《Java设计模式》课程设计报告.docx

    《Java设计模式》课程设计报告主要探讨了如何利用Java编程语言和MyEclipse集成开发环境来实现基于设计模式的西瓜市场系统。这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为...

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    重学java的设计模式

    Java作为一门广泛应用的开发语言,其设计模式的应用对于提高代码质量、可维护性和可扩展性至关重要。本文将着重探讨创建型模式、结构型模式和行为模式这三大类设计模式,并结合六项设计原则进行深入解析。 首先,...

    java设计模式(刘伟)

    ### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...

    java设计模式课程设计

    使用5种设计模式完成的一个点单系统,显示不同系列下的所有商品,点击选择冰度甜度之后添加到订单中,计算总金额,下单之后发送订单到门店的后厨制作商品。使用了抽象工厂模式、装饰模式、单例模式、代理模式、原型...

    java经典设计模式

    5. **原型模式**:原型模式是一种创建型设计模式,它通过复制现有的对象来创建新对象,而不是通过构造函数。这种方式可以提高效率,特别是当创建对象很耗时或者对象的构造过程很复杂时。 6. **适配器模式**:适配器...

    JAVA常用设计模式

    JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...

    《Java设计模式》课后答案-刘伟.rar

    创建型设计模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们主要关注对象的创建过程,使得代码更加灵活且易于扩展。 结构型设计...

    java设计模式ppt

    ### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...

    Head First 设计模式 +Java设计模式(第2版)

    《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...

    java设计模式考试题.docx

    java设计模式考试题全文共4页,当前为第1页。java设计模式考试题全文共4页,当前为第1页。 java设计模式考试题全文共4页,当前为第1页。 java设计模式考试题全文共4页,当前为第1页。 java设计模式考试题全文共4页,...

    《Java设计模式》课后习题参考答案-刘伟(20180723).pdf

    此外,为了确保参考资料的权威性,建议读者查阅原书《Java设计模式》以获得更加详尽的解释和说明。如果有任何意见或建议,可以通过提供的电子邮箱与作者联系。在学习设计模式的过程中,理解每一个模式的意图、结构、...

    设计模式Java

    Java版本设计模式,深入浅出系列 Java版本设计模式,深入浅出系列 Java版本设计模式,深入浅出系列

    23种java设计模式.pdf

    " JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...

    java版本的设计模式的实现demo

    在Java编程中,运用合适的设计模式可以提高代码的可维护性、可扩展性和可复用性。以下是关于Java版本设计模式实现demo的一些补充说明: 1. 设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式...

Global site tag (gtag.js) - Google Analytics