흑마 프로그래머 - 단일 디자인 모델

3833 단어
-------android 교육,java 교육,당신과 교류하기를 기대합니다!------------
단일 디자인 모델은 하나의 클래스가 메모리에 하나의 대상만 존재하는 문제를 해결하기 위한 것이다.단일 디자인 모델에서 두 가지 방식이 있는데 그것이 바로 게으름뱅이식과 굶주림식이다. 다음은 이 두 가지 방식을 설명한다.수행 단계는 다음과 같은 방식으로 수행됩니다.
1. 구조 함수를 사유화한다.
2. 클래스에 이 클래스의 대상을 만듭니다.
3. 객체를 가져오는 방법을 제공합니다.
다음은 예를 들어 Person류의 예를 통해'게으름뱅이식'과'굶주림식'이라는 두 가지 단일 디자인 모델을 분석한다.Person 클래스에는 두 개의 멤버 변수name과 age가 있습니다.

단례 디자인 모델 방식1: 굶주림식


굶주린 사람"먼저 대상을 초기화하고 클래스가 메모리에 들어갈 때 이미 대상이 존재하기 때문입니다. 아래의 예를 보십시오. 하나의 클래스가 메모리에 단일 대상만 있는 목표를 실현하기 위해 Person 클래스에서 구조 방법을 사유화하면 외부에서 구조 방법을 호출하여 Person 클래스를 만드는 대상을 피할 수 있습니다. 그러나 외부에서 이 클래스의 구성원 방법으로 구성원 변수를 조작해야 합니다. 대상을 만들지 않으면 어떻게 구성원 방법을 호출합니까? 해결자법은 Person 클래스 내부에서 유일한 Person 클래스의 대상 p를 만들고 이 대상을 가져오는 방법을 제공하는 getPerson () 이다. 이 방법은 정적이어야 한다. 정적 방법은 클래스 이름으로 호출할 수 있기 때문에 정적 방법이 아니면 대상을 사용해서 호출해야 하지만 외부에서 이 대상을 만들 수 없다. 이것이 바로 대상을 가져오는 방법인 getPerson ()이 정적이어야 하는 이유이다.그리고 클래스 내부에서 만든 대상 p도 정적이어야 합니다. 정적방 getPerson () 은 정적 구성원 변수에만 접근할 수 있기 때문입니다.코드 예는 다음과 같다. 주함수에서 출력은 다음과 같다. 이 결과를 통해 우리는 코드 예에서 대상 p1과 p2가 같은 메모리 공간, 즉 같은 대상을 가리키는 것을 증명할 수 있다.
콘솔 출력 결과:
Teacher : 25 Teacher : 25
코드:
package com.itheima.entranceExam.blog;

class Person {
	// 
	private String name;
	// 
	private int age;
	
	// , static 
	static Person p = new Person();
	
	// , , static 
	public static Person getPerson() {
		return p;
	}
	
	// 
	private Person() { }

	// 
	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 class PersonTest {

	public static void main(String[] args) {

		// Person 
		Person p1 = Person.getPerson();
		Person p2 = Person.getPerson();
		
		p1.setName("Student");
		p1.setAge(23);
		
		p2.setName("Teacher");
		p2.setAge(25);
		System.out.println(p1.getName()+" : "+p1.getAge());
		System.out.println(p1.getName()+" : "+p1.getAge());
	}
}

단일 디자인 모델 방식2: 게으름뱅이


'게으름뱅이식'은 클래스가 메모리에 불러올 때 클래스의 대상이 존재하지 않고 get 대상 방법을 호출할 때만 대상을 만든다. 이런 방식을 대상의 시간 지연 불러오기라고도 하는데 닉네임은'게으름뱅이식'이다.다음은 코드 분석을 통해 '게으름뱅이' 단일 디자인 모델을 분석합니다. 코드는 다음과 같습니다. '게으름뱅이' 는 getPerson 방법을 호출할 때만 Person 대상을 만들 수 있습니다. 이 목적을 실현하기 위해 Person 클래스 대상을 인용할 때, new 대상을 만들 수 없고, p를null (열 번째 줄) 로 초기화할 수 없습니다., 그리고 getPerson 방법에서 새 대상을 추가합니다.단, 여러 개의 대상을 만드는 문제가 발생하지 않도록 getPerson 방법에서 p가 비어 있는지 판단해야 한다(15줄).객체가 작성되었음을 비워 두지 않으면 작성할 수 없으며 비워 두면 처음으로 작성된 객체인 경우 객체를 작성할 수 있습니다.판단하지 않으면 여러 개의 대상을 만드는 문제를 초래할 수 있다. 이것은 단일 디자인 모델이 아니다.아래의 예는 출력 결과가 위의 것과 같다.코드:
package com.itheima.entranceExam.blog;

class Person {
	// 
	private String name;
	// 
	private int age;
	
	// , static , 
	static Person p = null;
	
	// , , static 
	public static Person getPerson() {
		// , , 
		if(p == null)
			p = new Person();
		return p;
	}
	
	// 
	private Person() { }

	// 
	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 class PersonTest {

	public static void main(String[] args) {

		// Person 
		Person p1 = Person.getPerson();
		Person p2 = Person.getPerson();
		
		p1.setName("Student");
		p1.setAge(23);
		
		p2.setName("Teacher");
		p2.setAge(25);
		System.out.println(p1.getName()+" : "+p1.getAge());
		System.out.println(p1.getName()+" : "+p1.getAge());
	}
}

'배고픔식'과'게으름뱅이식'의 차이점은 배고픔식은 클래스가 메모리에 불러올 때 대상이 이미 존재하고 게으름뱅이는 필요할 때 대상을 만든다는 것이다.실제 개발 과정에서 게으름뱅이식은 안전 문제가 존재하기 때문에 여러 라인이 동시에 이 방법을 호출할 때(getPerson 방법) 대상이 유일하지 않은 문제가 발생할 수 있다.

좋은 웹페이지 즐겨찾기