您的位置:首页 > 编程语言 > Java开发

java设计模式之原型模式

2017-11-27 12:02 459 查看
java设计模式参考文章:

Java设计模式实战23种设计模式介绍以及在Java中的实现Java设计模式 Java经典设计模式之五大创建型模式

## 定义 ##

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


## 代码示例 ##

package com.design_pattern.Prototype;

import java.io.*;
import java.util.List;

/**
* @author bwx
* @date 2017/11/27
*/
public class Person implements Cloneable, Serializable {

private static final long serialVersionUID = -6890856494991687711L;

private String name;

private int age;

private List<String> friends;

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> getFriends() {
return friends;
}

public void setFriends(List<String> friends) {
this.friends = friends;
}

// 利用序列化实现深复制 Person需要先实现Serializable接口.
@Override
public Object clone() throws CloneNotSupportedException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);

ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
return ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
// 浅复制
//        return super.clone();
}

@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", friends=" + friends +
'}';
}
}


## 优点 ##

1.当创建类的新实例的代价更大时,使用原型模式复制一个已有的实例可以提高创建新实例的效率。
2.可以动态的保存当前对象的状态。在运行时,可以随时使用对象流保存当前对象的一个复制品。
3.可以在运行时创建新的对象,而无须创建一系列类和集成结构。
4.可以动态的添加、删除原型的复制品。


## 缺点 ##

## 解析 ##

1.程序需要从一个对象出发,得到若干个和其状态相同,并可独立变化其状态的对象时。
2.当对象的创建需要独立于它的构造过程和表示时。
3.一个类创建实例状态不是很多,那么就可以将这个类的一个实例定义为原型,那么通过该实例复制该原型得到新的实例。
4.可能比重新使用类的构造方法创建新实例更方便
原型模式很少单独出现, 一般都是与工厂方法模式一起出现,
通过clone方法创建一个对象, 然后由工厂返回给调用者.
像Spring中的Bean的创建模式就有singleton与prototype模式.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: