큰소리 디자인 모델 의 어댑터 모델 총화 - 자바 실현

9044 단어 디자인 모드
주의: 예 시 는 에서 나 왔 습 니 다.
만약 에 다음 과 같은 장면 이 있다 면 농구 경기 감독 이 타임 을 부 를 때 수비 수 센터 공격수 에 게 공격 과 수비 임 무 를 배정 하 는 간단 한 코드 는 다음 과 같다.
선수 류
package Test17;

//     
public abstract class Player {

    protected String name;
    public Player(String name)
    {
        this.name = name;
    }

    public abstract void Attack();
    public abstract void Defense();

}

스 트 라 이 커 센터
package Test17;

//  
public class Forwards extends Player {

    public Forwards(String name) {
        super(name);

    }

    @Override
    public void Attack() {
        System.out.println("   "+name+"   ");

    }

    @Override
    public void Defense() {
        System.out.println("   "+name+"   ");

    }

}
package Test17;

//  
public class Center extends Player {

    public Center(String name) {
        super(name);

    }

    @Override
    public void Attack() {
        System.out.println("   "+name+"   ");

    }

    @Override
    public void Defense() {
        System.out.println("   "+name+"   ");

    }

}
package Test17;

//  
public class Guards extends Player {

    public Guards(String name) {
        super(name);

    }

    @Override
    public void Attack() {
        System.out.println("   "+name+"   ");

    }

    @Override
    public void Defense() {
        System.out.println("   "+name+"   ");

    }

}

클 라 이언 트 코드
package Test17;

public class Program {

    public static void main(String[] args) {

        Player b = new Forwards("   ");
        b.Attack();

        Player m = new Guards("     ");
        m.Attack();

        Player ym = new Center("    ");

        ym.Attack();
        ym.Defense();

    }

}

만약 에 외국 계 센터 가 영 어 를 못 알 아 듣 고 코치 님 이 말씀 하 시 는 영어 공격 수 비 를 못 알 아 듣 겠 다 면 우 리 는 번역자 류 가 있어 야 한다. 그 다음 에 우 리 는 어댑터 모델 로 재 구성 코드 를 다음 과 같이 해 야 한다.
외국 국적 의 센터 클래스
package Test17;

//    
public class ForeignCenter {

    private String name;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void   ()
    {
        System.out.println("     "+name+"   ");
    }

    public void   ()
    {
        System.out.println("     "+name+"   ");
    }

}

번역자 류
package Test17;

//   
public class Translator extends Player {

    private ForeignCenter wjzf = new ForeignCenter();

    public Translator(String name) {
        super(name);
        wjzf.setName(name);
    }

    @Override
    public void Attack()
    {
        wjzf.  ();
    }

    @Override
    public void Defense()
    {
        wjzf.  ();
    }

}

클 라 이언 트 코드
package Test17;

public class Program {

    public static void main(String[] args) {

        Player b = new Forwards("   ");
        b.Attack();

        Player m = new Guards("     ");
        m.Attack();

        //Player ym = new Center("    ");
        Player ym = new Translator("    ");

        ym.Attack();
        ym.Defense();

    }

}

어댑터 모드 는 하나의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 어댑터 모드 로 바 꾸 어 인터페이스 가 호 환 되 지 않 아 함께 작업 할 수 없 었 던 클래스 들 을 함께 작업 할 수 있 게 합 니 다.
소프트웨어 개발 에서 즉, 시스템 의 데이터 와 행위 가 모두 정확 하지만 인터페이스 가 일치 하지 않 을 때 우 리 는 어댑터 를 사용 하 는 목적 은 제어 범위 이외 의 기 존 대상 이 특정한 인터페이스 와 일치 하도록 하 는 것 을 고려 해 야 한다.
이미 존재 하 는 종 류 를 사용 하고 싶 지만 인터페이스, 즉 그것 의 방법 이 당신 의 요구 와 다르다 면 어댑터 모드 를 사용 하 는 것 을 고려 해 야 합 니 다.
두 가지 일 은 같 거나 비슷 하지만 서로 다른 인 터 페 이 스 를 가지 고 있 을 때 이 를 사용 하면 고객 코드 가 같은 인 터 페 이 스 를 통일 적 으로 호출 하면 더욱 간단 하고 직접적 이 며 치밀 할 수 있다.
쌍방 이 수정 하기 가 쉽 지 않 을 때 어댑터 모드 를 사용 하 는 것 이 적당 하 다.
단점 은 대상 어댑터 에 있어 서 어댑터 를 교체 하 는 실현 과정 이 비교적 복잡 하 다.

좋은 웹페이지 즐겨찾기