java设计模式—原型模式
Java原型模式
1、概述
啥是原型模式?
原型模式属于设计模式中的创建型中的一员,
**原型模式:**使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象!
说大白话就是自己复制自己,通过原生对象复制出一个新的对象,这两个对象结构相同且相似;
需要注意的是,原型对象自己不仅是个对象还是个工厂!并且通过克隆方式创建的对象是全新的对象,它们都是有自己的新的地址,通常对克隆模式所产生的新对象进行修改,是不会对原型对象造成任何影 响的,每一个克隆对象都是相对独立的,通过不同的方式对克隆对象进行修改后,可以得到一系列相似但不完全相同的对象。【获取资源】
2、原型UML图
3、深克隆与浅克隆
原型模式中又可细分为浅克隆和深克隆;【获取资源】
**浅克隆:**在浅克隆中,如果原型对象的成员变量是值类型(八大基本类型,byte,short,int,long,char,double,float,boolean).那么就直接复制,如果是复杂的类型,(如枚举、对象)就只复制对应的内存地址。
**深克隆:**就是什么都是单独的!全部复制,然后各自独立,修改克隆对象对于原型对象没有任何影响,对于深克隆具体克隆多深取决于业务需求和类结构设计。
4、代码案例
4.1、先来一个简单小案例热热身
这个浅克隆比较简单,让我们由浅入深的学习原型模,先看下这个有助于理解深克隆,废话不多说直接上代码
package pattern.prototype.demo;
/**
* 苹果原型类,这就是我们要复制的对象类
* 要想克隆一个实例必须要实现Cloneable接口,否则会抛出异常(java.lang.CloneNotSupportedException),
* @author ningbeibei
*/
public class Apple implements Cloneable{
//苹果品种
public String variety;
//数量
public int no;
//添加克隆这个对象的方法,
public Apple cloneApple() {
Object obj =null;
try {
obj = super.clone();
return (Apple) obj;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public String getVariety() {
return variety;
}
public void setVariety(String variety) {
this.variety = variety;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
}
测试下,看结果是不是很简单,只需要实现Cloneable接口调用clone方法就OK【获取资源】
package pattern.prototype.demo;
public class test {
public static void main(String[] args) {
Apple a= new Apple();
a.setVariety("富士苹果");
System.out.println("原型对象:"+a);
Apple b = a.cloneApple();
System.out.println("克隆出来的新对象:"+b);
System.out.println("两个对象是否相等:"+(a == b));
b.setVariety("红星苹果");
System.out.p