원형 모드(protype)-1
5285 단어 디자인 모드
패턴 구현-얕 은 복사 와 깊 은 복사
다음 예:
/**
*
*/
public class Monkey implements Cloneable, Serializable {
private static final long serialVersionUID = -5655707590382020734L;
private int height;
private int weight;
private GoldRingedStaff staff;
private Date birthDate;
public Monkey() {
this.birthDate = new Date();
this.staff = new GoldRingedStaff();
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public GoldRingedStaff getStaff() {
return staff;
}
public void setStaff(GoldRingedStaff staff) {
this.staff = staff;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
//
// ( (Serilization) )
public Object deepClone() throws IOException, ClassNotFoundException {
//
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
//
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
}
//
@Override
protected Object clone() throws CloneNotSupportedException {
return (Monkey) super.clone();
}
@Override
public String toString() {
return "birthDate=" + birthDate + " height=" + height + " weight="
+ weight + " GoldRingedStaff=" + staff;
}
}
//
public class GoldRingedStaff implements Cloneable, Serializable {
private static final long serialVersionUID = -206209645135740010L;
//
private float height = 100.0F;
//
private float diameter = 100.0f;
public GoldRingedStaff() {
}
//
public void grow() {
this.diameter *= 2.0;
this.height *= 2.0;
}
//
public void shrink() {
this.diameter /= 2.0;
this.height /= 2.0;
}
//
public void move(){
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public float getDiameter() {
return diameter;
}
public void setDiameter(float diameter) {
this.diameter = diameter;
}
@Override
public String toString() {
return "height=" + height + " diameter" + diameter;
}
}
//
public class MainApp {
private Monkey money = new Monkey();
void change() throws Exception {
Monkey copyMoney;
Thread.sleep(1000);
copyMoney = (Monkey) money.clone();
System.out.println(" Money="+money);
System.out.println("copyMoney="+copyMoney);
System.out.println("money==copyMoney?"+(money==copyMoney));
System.out.println((money.getStaff() == copyMoney.getStaff())?"money.getStaff() == copyMoney.getStaff()":"money.getStaff() != copyMoney.getStaff()");
Thread.sleep(1000);
System.out.println("---------------deep Copy------------------------------------");
copyMoney = (Monkey) money.deepClone();
System.out.println(" Money="+money);
System.out.println("copyMoney="+copyMoney);
System.out.println("money==copyMoney?"+(money==copyMoney));
System.out.println((money.getStaff() == copyMoney.getStaff())?"money.getStaff() == copyMoney.getStaff()":"money.getStaff() != copyMoney.getStaff()");
}
/**
*
*
* ,
* ,
*
*
* Serializable Cloneable
* ,
*/
public static void main(String[] args) {
try {
new MainApp().change();
} catch (Exception e) {
e.printStackTrace();
}
//out put
/*Money=birthDate=Tue Dec 07 00:28:21 CST 2010 height=0 weight=0 GoldRingedStaff=height=100.0 diameter100.0
copyMoney=birthDate=Tue Dec 07 00:28:21 CST 2010 height=0 weight=0 GoldRingedStaff=height=100.0 diameter100.0
money==copyMoney?false
money.getStaff() == copyMoney.getStaff()
---------------deep Copy------------------------------------
Money=birthDate=Tue Dec 07 00:28:21 CST 2010 height=0 weight=0 GoldRingedStaff=height=100.0 diameter100.0
copyMoney=birthDate=Tue Dec 07 00:28:21 CST 2010 height=0 weight=0 GoldRingedStaff=height=100.0 diameter100.0
money==copyMoney?false
money.getStaff() != copyMoney.getStaff()*/
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.