java 디자인 모드(2)-원형 모드

7341 단어 java 디자인 모드

원형 모델

Prototype , 。 Prototype , 。

2. 원형 모델의 특징


4
  • 원형 대상이 자체로 목표 대상을 만든다.즉, 대상이 이 동작을 만드는 것은 원형 대상 자체에서 나온 것이다

  • 4
  • 대상 객체는 원형 객체의 클론입니다.즉, Prototype 모드를 통해 만들어진 대상은 원형 대상과 같은 구조를 가지고 있을 뿐만 아니라 원형 대상과 같은 값을 가지고 있다

  • 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]
            }
    }
    

    좋은 웹페이지 즐겨찾기