어댑터(클래스 어댑터, 객체 어댑터 모드)

자세히 보기
1: 클래스 어댑터 모드
  
만일 우리가 Person류가 있다면, 이 Person류에는 불고 당기는 방법이 있다.시스템 개발의 절반에 이르러 우리는 이 종류에 두 가지 방법을 더 첨가하여 연주, 당기기, 연주, 노래의 기능을 실현해야 한다는 것을 발견했다.그러나 전체 시스템을 살펴보면, 연주, 노래 기능은 임시로 사용된 것일 뿐이다.그리고 Person 클래스는 전체 시스템에서 합리적으로 설계되어 있기 때문에 우리는 더 이상 이런 종류의 행위를 바꾸고 싶지 않다.이럴 때 어떡하지?서두르지 마세요. 클래스 어댑터 모드가 이런 문제를 해결할 수 있습니다.
아마도 당신은 왜'원'에 직접 방법을 추가하지 않는지, 답은,
적합은 어떤 목적을 실현하기 위해 하나의 원류를 위해 일시적으로 어떤 방법을 더하기 때문에 원류의 구조를 파괴해서는 안 된다.동시에 이렇게 하지 않아도 자바의 고내집, 저결합의 원리에 부합된다.직접 덧붙일 수 없으니, 이어서 우리는 어떻게 해야 인간이라는 Person의 '원' 에 탄력, 노래 방법을 첨가하고, '원' 의 자체 구조를 파괴하지 않을 수 있는지 이야기하자.소스 코드는 다음과 같습니다.
1, 클래스 어댑터의 목표 기능(인터페이스로 목표 기능을 실현)
  package com.supan.shipeiqi;
  public interface Target {
    // 
	public void chui();
	public void la();
	public void tan();
	public void chang();
   }

2, 일반 클래스 Person, 이 클래스는 일상적인 사용에 약간의 방법을 추가해야 하지만 이런 종류를 바꾸고 싶지 않다.
   package com.supan.shipeiqi;
   public class Person {
	private String name;
	private int age;
	public void chui(){
		System.out.println(" , ");
	}
    public void la(){
    	System.out.println(" , ");
    }
   }

3,
어댑터 클래스, 이 클래스는 Person을 기반으로 하고 이를 바탕으로 필요한 방법을 추가한다. 이 클래스는 Person을 통합시켰다. 즉, 이 클래스는 Person의 하위 클래스로 Person의 모든 속성을 가지고 Person의 속성을 임의로 조종할 수 있기 때문에 이런 종류에 몇 가지 방법을 추가하면 Person 행위를 임의로 증가시켜 적당한 목표를 실현할 수 있다. 이 클래스도 클래스 어댑터 모델의 대표적인 핵심 클래스이다.
   package com.supan.shipeiqi;
   public class PersonAdapter extends Person implements Target {
	public void tan() {
		System.out.println(" , ");
	}
	public void chang() {
		System.out.println(" , ");
	}
   }

4, 테스트 클래스
   package com.supan.shipeiqi;
   public class ClassAdapterTest {
	public static void main(String[] args) {
		PersonAdapter pd = new PersonAdapter();
		pd.chui();
		pd.la();
		pd.tan();
		pd.chang();
	}
   }

5, 인쇄 결과
나 는 불 줄 안다
끌다
어댑터에서 나온 방법
어댑터에서 나온 방법
코드를 다 본 후에 설명을 해야 하는데, 왜 그것을 클래스 어댑터 모델이라고 부릅니까?분명히 어댑터 클래스는 Person 클래스를 계승했고 자바와 같은 단일 계승 언어에서도 그가 다른 클래스를 계승할 수 없다는 것을 의미한다. 즉, 이 어댑터는 Person 같은 클래스만을 위한 서비스이다.그래서 유형 적합 모델이라고 부른다.
클래스의 적합 모드를 말하고 두 번째 대상의 어댑터 모드를 이야기하기 시작했다.대상 어댑터 모드는 '원본' 을 하나의 대상으로 어댑터 클래스에 집합하는 것입니다.
2: 객체 어댑터 모드
1, 대상 커넥터
   package com.supan.shipeiqi;
   public interface Target {
    // 
	public void chui();
	public void la();
	public void tan();
	public void chang();
   }

2, Person 소스 클래스
   package com.supan.shipeiqi;
   public class Person {
private String name;
private int age;
public void chui(){
System.out.println ("나는 불 줄 안다. 원본에서 온 방법");
}
    public void la(){
    System.out.println ("원본 대상에서 오는 방법");
    }
   }
3, 대상 어댑터 클래스, 이 클래스는 핵심 클래스(클래스 어댑터 클래스와 차이점 주의)
   package com.supan.shipeiqi;
   public class PersonAdapter2 implements Target {
	private Person p;
	public PersonAdapter2(Person p) {
        this.p = p; 
	}
	public void chui() {
		p.chui();
	}
	public void la() {
        p.la();		
	}
	public void tan() {
        System.out.println(" , ");
	}
	public void chang(){
		System.out.println(" , ");
	}
   }
   

4, 테스트 클래스:
  package com.supan.shipeiqi;
  public class ObjectAdapterTest {
	public static void main(String[] args) {
		Person p = new Person();
		PersonAdapter2 pa2 = new PersonAdapter2(p);
		pa2.chui();
		pa2.la();
		pa2.tan();
		pa2.chang();
	}
   }

5, 출력:
나 는 불 줄 안다
끌다
나는 칠 줄 안다. 이 방법은 어댑터에서 나온 것이다
나는 노래할 줄 안다. 이 방법은 적합자에서 나온다
 
3. 클래스 어댑터 모드, 대상 어댑터 모드에 대한 한 가지 생각:
   1.클래스의 어댑터 모델은 단일 원본의 어댑터에 사용되는데 그 원본의 단일화로 인해 코드는 선택 논리를 쓰지 않고 뚜렷하다.대상의 어댑터 모델은 다원적 어댑터에 사용할 수 있어 어댑터 모델의 부족함을 보완했다. 그래서 원래 어댑터를 많이 써야 하는 상황이 존재하지 않았다. 약점은 원본의 수량이 많기 때문에 구체적인 실현 조건의 선택 비례가 많고 뚜렷하지 않다는 것이다.
   2.어댑터 모드는 주로 다음과 같은 경우에 사용됩니다.
(1) 시스템은 기존의 클래스를 사용해야 하지만 기존의 클래스는 수요에 완전히 부합되지 않는다.
(2) 서로 큰 관련이 없는 클래스가 들어와서 어떤 일을 완성한다는 것을 말한다(대상이 잘 어울린다는 뜻).

좋은 웹페이지 즐겨찾기