java 디자인 모드(2)-원형 모드
7341 단어 java 디자인 모드
원형 모델
Prototype , 。 Prototype , 。
2. 원형 모델의 특징
4
4
4
3. 원형 모델 응용 장면
4
4
4
어떻게 clone clone 3부작?1 Cloneable 인터페이스 구현을 선언합니다.2 슈퍼를 호출합니다.clone은 대상을 가져옵니다. 부류의 clone 구현에 문제가 없다면, 이 대상의 메모리 저장소에서 모든 부류가 정의한field는 이미 clone이 되었습니다. 이 클래스의 primitive와 변하지 않는 형식의 인용도 복제되었습니다. 변하지 않는 형식의 인용은 모두 얕은copy입니다.3 얕은 코피의 인용을 원형 대상의 새로운 복제체를 가리킨다.
class User implements Cloneable {
String name;
int age;
@Override
public User clone() throws CloneNotSupportedException {
return (User) super.clone();
}
}
class Account implements Cloneable {
User user;
long balance;
@Override
public Account clone() throws CloneNotSupportedException {
Account account = null;
account = (Account) super.clone();
if (user != null) {
account.user = user.clone();
}
return account;
}
}
다음은 심층copy 코드입니다.
Person.java
import java.util.ArrayList;
import java.util.List;
public class Person implements Cloneable{
//
private String name;
//
private int age;
//
private String sex;
//
private List friends;
public List getFriends() {
return friends;
}
public void setFriends(List friends) {
this.friends = 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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Person clone(){
try {
// , ,
//super.clone() , 。
Person p = (Person)super.clone();
List l = new ArrayList();
for (String friends : this.getFriends()) {
l.add(friends);
}
p.setFriends(l);
return p;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
Main.java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Person person1 = new Person();
List friends = new ArrayList();
friends.add("James");
friends.add("Yao");
person1.setFriends(friends);
Person person2 = person1.clone();
// person
System.out.println(person1.getFriends());//[James, Yao]
System.out.println(person2.getFriends());//[James, Yao]
// person , , ,
friends.add("Mike");
person1.setFriends(friends);
System.out.println(person1.getFriends());//[James, Yao, Mike]
System.out.println(person2.getFriends());//[James, Yao]
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
어댑터(클래스 어댑터, 객체 어댑터 모드)1: 클래스 어댑터 모드 만일 우리가 Person류가 있다면, 이 Person류에는 불고 당기는 방법이 있다.시스템 개발의 절반에 이르러 우리는 이 종류에 두 가지 방법을 더 첨가하여 연주, 당기기, 연주, 노래의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.