`
dengwenwei121
  • 浏览: 36081 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

原型模式

 
阅读更多

一、什么是原型模式

Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。

二、原型模式的特点

1. 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。

2.目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。

3.根据对象克隆深度层次的不同,有浅度克隆与深度克隆。

三、原型模式应用场景

- 在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结构,还希望继承原型对象的数据。

- 希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。

- 隐藏克隆操作的细节。很多时候,对对象本身的克隆需要涉及到类本身的数据细节。

package com.dw.test;

public class Person implements Cloneable{
	private String name;
    private int age;
	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  Person clone(){
		try {
			Person	person = (Person)super.clone();
			return person;
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
			return null;
		}
    }
}

package com.dw.test;

import java.util.List;


public class Person1 implements Cloneable{
	private String name;
    private int age;
    private List<String> finds;
	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 List<String> getFinds() {
		return finds;
	}
	public void setFinds(List<String> finds) {
		this.finds = finds;
	}
	//浅度克隆
    public  Person1 clone(){
		try {
			Person1	person = (Person1)super.clone();
			return person;
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
			return null;
		}
    }
}

package com.dw.test;

import java.util.ArrayList;
import java.util.List;

public class MainClass {
	/*
	 * 一、什么是原型模式 Prototype模式是一种对象创建型模式,
	 * 它采 取复制原型对象的方法来创建对象的实例。
	 * 使用Prototype模式创建的实例,具有与原型一样的 数据。
	 * 二、原型模式的特点
	 *1. 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
	 *2.目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型
	 *对象具有相同的结构,还与原型对象具有相同的值。
	 *3.根据对象克隆深度层次的不同,有浅度克隆与深度克隆
	 *三、原型模式使用场景
	 *在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结构,还希望继承原型对象的数据。
	 *希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。
	 *隐藏克隆操作的细节。很多时候,对对象本身的克隆需要涉及到类本身的数据细节。
	 */
	public static void main(String[] args) {
		//浅度克隆
	/*	Person person=new Person();
		person.setAge(19);
		person.setName("邓文伟");
		Person person1=person.clone();
		person.setName("小伟");
		System.out.println(person.getAge());
		System.out.println(person.getName());
		
		System.out.println(person1.getAge());
		System.out.println(person1.getName());*/
		
		Person1 person=new Person1();
		List<String> finds=new ArrayList<String>();
		finds.add("你好");
		finds.add("hello");
		
		person.setAge(19);
		person.setName("邓文伟");
		person.setFinds(finds);
		
		Person1 person1=person.clone();
		
		List<String> finds1=new ArrayList<String>();
		finds1.add("你好11");
		finds1.add("hello111");
		person.setFinds(finds1);
		
		System.out.println(person.getFinds()+","+person.getAge());
		System.out.println(person1.getFinds()+","+person1.getAge());
		
	}

}





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics