标签:nts stat 原型 tst block 就是 obj 一个 tor
5. 原型模式(面试)介绍
原型模式虽然是创建型的模式, 但是与工厂模式没有关系, 从名字既可看出, 该模式的思想就是将一个对象作为原型, 对其进行复制, 克隆, 产生一个和原对象类似的新对象
示例
public class Prototype implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
}
很简单, 一个原型类, 只需要实现Cloneable接口, 复写clone方法, 此处clone方法可以改成任意的名称, 因为Cloneable接口是一个空接口, 你可以任意定义实现类的方法名, 如cloneA或者cloneB, 因为此处的重点是super.clone()这句话, super.clone()调用的Object的clone()方法, 而在Object类中, clone()是native的, 具体怎么实现, 此处不再深究
在这里, 我将结合对象的浅复制和深复制说一下, 首先需要了解对象深浅复制的概念:
浅复制:将一个对象复制后, 基本数据类型的变量都会重新创建, 而引用类型, 指向的还是原对象所指向的。
- 深复制:将一个对象复制后, 不论是基本数据类型还是引用类型, 都是重新创建的, 简单来说, 就是深复制进行了完全彻底的复制, 而浅复制不彻底
public class Prototype implements Cloneable, Serializable {
private static final long serialVersionUID = 1L;
private String string;
private SerializableObject obj;
// 浅复制
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
// 深复制
public Object deepClone() throws IOException, ClassNotFoundException {
// 写入当前对象的二进制流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
// 读出二进制流产生的新对象
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
public SerializableObject getObj() {
return obj;
}
public void setObject(SerializableObject obj) {
this.obj = obj;
}
}
class SerializableObject implements Serializable {
private static final long serialVersionUID = 1L;
}
介绍
建造者模式的定义是:将一个复杂的对象的构造与它的表示分离, 使同样的构建过程可以创建不同的表示, 这样的设计模式被称为建造者模式。
建造者模式的角色定义, 在建造者模式中存在以下4个角色:
builder: 为创建一个产品对象的各个部件指定抽象接口
ConcreteBuilder: 实现Builder的接口以构造和装配该产品的各个部件, 定义并明确它所创建的表示, 并提供一个检索产品的接口。
Director: 构造一个使用Builder接口的对象
工厂模式和构建模式的区别
构建者模式和工厂模式很类似, 区别在于构建者模式是一种个性产品的创建, 而工厂模式是一种标准化的产品创建
导演类:按照一定的顺序或者一定的需求去组装一个产品
构造者类:提供对产品的不同个性化定制, 最终创建出产品
示例
// 构建者
public class StudentBuilder {
// 需要的构建对象
private Student student = new Student();
public StudentBuilder id(int id) {
student.setId(id);
return this;
}
public StudentBuilder name(String name) {
student.setName(name);
return this;
}
public StudentBuilder age(int age) {
student.setAge(age);
return age;
}
public StudentBuilder father(String fatherName) {
Father father = new Father();
father.setName(fatherName);
student.setFather(father);
return this;
}
// 构建对象
public Student build() {
return student;
}
}
// 导演类/ 测试类
public class BuildDemo {
public static void main(String[] args) {
StudentBuilder builder = new StudentBuilder();
// 如何创建一个Student
Student student = builder.age(1).name("zhangsan").father("zhaosi").build();
System.out.println(student);
}
}
故事凌
明天能否加个鸡腿!
喜欢作者
标签:nts stat 原型 tst block 就是 obj 一个 tor
原文地址:https://blog.51cto.com/14901322/2521138