Open zgq105 opened 5 years ago
原型模式是创建型设计模式之一,指通过拷贝原有对象的方式实现对象的创建;从而提高了对象创建的效率。
public class Book implements Cloneable { private double price; private String name; public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } }
在java中,通过实现接口Cloneable,同时重写Object#clone方法便可实现克隆操作,即可实现原型模式。
在JDK大量使用了原型模式,比如ArrayList#clone等;在Android SDK中,也使用大量的原型模式,比如Intent#clone等。
浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。
深拷贝:当一个类的拷贝方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝。
//浅拷贝示例代码
@Override public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; }
//深拷贝示例代码
public class Book implements Cloneable { private double price; private String name; private Merchant merchant; public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Merchant getMerchant() { return merchant; } public void setMerchant(Merchant merchant) { this.merchant = merchant; } @Override public Object clone() { try { Book book = (Book) super.clone(); book.setMerchant((Merchant) this.merchant.clone()); return book; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } } public class Merchant implements Cloneable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } }
原型模式就是在原有对象的基础上,提高创建对象的效率。
1. 什么是原型模式?有什么作用?
原型模式是创建型设计模式之一,指通过拷贝原有对象的方式实现对象的创建;从而提高了对象创建的效率。
2. 如何实现?
在java中,通过实现接口Cloneable,同时重写Object#clone方法便可实现克隆操作,即可实现原型模式。
3. JDK或Android的应用举例
在JDK大量使用了原型模式,比如ArrayList#clone等;在Android SDK中,也使用大量的原型模式,比如Intent#clone等。
4. 浅拷贝、深拷贝
浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。
深拷贝:当一个类的拷贝方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝。
//浅拷贝示例代码
//深拷贝示例代码
5. 小结
原型模式就是在原有对象的基础上,提高创建对象的效率。