어댑터 모드 노트
생활 속에서 흔히 볼 수 있는 연결기를 생각해 보자. 내 핸드폰에 원래 맞추어 놓은 2.5MM 이어폰이 고장났는데 보통 3.5MM 이어폰의 플러그가 커서 사용할 수 없다. 이럴 때 나는 연결기가 필요하다.
이 연결기가 하는 일은 바로 인터페이스의 전환으로 원래 호환되지 않았던 두 종류의 물건을 함께 일할 수 있게 하는 것이다.
만약 이 연결기가 한쪽은 3.5MM의 플러그이고, 한쪽은 2.5MM의 플러그라면, 그것은 바로 대상 어댑터 (대상을 조합하는 방법) 이다
만약 이 연결기에 2.5MM/3.5MM의 플러그/플러그가 있고 2.5MM/3.5MM의 플러그/플러그가 있다면 이것은 클래스 어댑터(다중 계승 방법)라고 할 수 있다.
기존의 클래스를 사용하고 싶은데 인터페이스가 요구에 맞지 않는다면 어댑터를 사용하세요
새로운 클래스를 만들고 싶으면 다른 인터페이스와 협동해서 작업을 할 수 있습니다. 비록 그 인터페이스가 클래스를 호환하지 않을 수도 있지만, 어댑터를 사용하십시오.
기존의 클래스를 사용하고 싶은데 공통된 인터페이스를 실현하려면 어댑터를 사용하십시오. 대상 어댑터입니다.
때때로 우리는 인터페이스를 정의했지만, 대부분의 하위 클래스는 모든 방법을 실현할 필요가 없다. 이때 우리는 추상적인 부류로 이 인터페이스에 어울릴 수 있다
예컨대
java.awt.event .Window 어댑터
WindowFocusListener ,
WindowListener ,
WindowStateListener ,
EventListener
하면, 만약, 만약...
WindowListener
인터페이스는 인터페이스 내의 모든 방법을 정의해야 합니다.이 추상류는 모든 방법을null로 정의하기 때문에 관심 있는 이벤트에 대한 방법만 정의합니다어댑터는 두 가지 실현 방식이 있다
1. 클래스 어댑터
2. 객체 어댑터
GOF를 볼 때 Stack Adapter의 예를 하나 쓴다. 자바가 1.1 버전에서 가져온 Stack은 단점이 많다. List 포장으로 Stack을 실현하는 것은 좋은 선택이다. Adapter 모드를 응용하면 쉽게 할 수 있다. 아래 프로그램에서 ClassStack은 클래스 어댑터이고 Object Stack은 대상 어댑터이다.
import java.util.LinkedList;
import java.util.List;
import static java.lang.System.*;
/**
* StackAdapter, a demo program of Adapter
*
* @author:Walter Fan at http://wind007.iteye.com
* @version 1.0 10/28/2008
*/
public class StackAdapter {
/**
* @param args
*/
public static void main(String[] args) {
out.println("Adapter pattern demo:");
Stack<Integer> stack1 = new ClassStack<Integer>();
out.println("=== Class Adapter ===");
for (int i = 0; i < 10; i++) {
stack1.push(i);
}
out.println("=== Object Adapter ===");
Stack<Integer> stack2 = new ClassStack<Integer>();
for (int i = 0; i < 10; i++) {
stack2.push(i);
}
out.println("Good Bye,
-Walter Fan");
}
}
interface Stack<T>
{
void push(T data);
T pop();
T top();
int size();
void clear();
boolean isEmpty();
}
class ObjectStack<T> implements Stack<T> {
private LinkedList<T> myList =new LinkedList<T>() ;
public void push(T data) {
myList.addFirst(data);
}
public T top() {
return myList.getFirst();
}
public T pop() {
return myList.removeFirst();
}
public boolean isEmpty() {
return myList.isEmpty();
}
public void clear() {
myList.clear();
}
public int size() {
return myList.size();
}
}
class ClassStack<T> extends LinkedList<T> implements Stack<T>, List<T> {
private static final long serialVersionUID = 1L;
public T top() {
return getFirst();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
개인 FLEX 지식 라이브러리 작업 노트[size=large]1、 이 방법은 TileWindows 팝업 창에 있습니다. TitleWindows의 maxWidth와 maxHeight를 지정하지 않으면 최대 값이 화면 전체에 깔립니다. 페이지의minHeigh...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.