자바 디자인 모드-전략 모드 상세 설명

전략 모드
전략 모델(Strategy Pattern)은 행위 형 모델 로 대상 이 특정한 행 위 를 하 는 것 을 말 하지만 서로 다른 장면 에서 이 행 위 는 서로 다른 실현 알고리즘 을 가진다.알고리즘 족 으로 각각 밀봉 하여 같은 인 터 페 이 스 를 실현 하여 그들 사이 에 서로 교체 할 수 있 게 하고 알고리즘 의 변 화 를 알고리즘 을 사용 하 는 고객 에 게 독립 시 킵 니 다.
4.567917.주요 해결:여러 가지 알고리즘 이 비슷 한 상황 에서 if..else 가 가 져 온 복잡 하고 유지 하기 어렵다4.567917.어떻게 해결 합 니까?이 알고리즘 들 을 하나의 클래스 로 봉 하여 임의로 교체 합 니 다4.567917.언제 사용 합 니까?한 시스템 은 여러 가지 유형 이 있 는데 이들 을 구분 하 는 것 은 그들의 직접적인 행위 일 뿐 입 니 다사용 필드:
4.567917.만약 에 한 시스템 에 여러 가지 유형 이 있다 면 그들의 차 이 는 그들의 행위 에 만 있 을 것 이다.그러면 전략 모델 을 사용 하면 한 대상 이 여러 행위 에서 한 가지 행 위 를 선택 하도록 동태 적 으로 할 수 있다4.567917.한 시스템 은 몇 가지 알고리즘 중 하 나 를 동적 으로 선택해 야 한다4.567917.만약 에 한 대상 이 많은 행 위 를 한다 면 적당 한 모델 을 사용 하지 않 으 면 이런 행 위 는 여러 가지 조건 으로 문 구 를 선택 하여 실현 할 수 밖 에 없다장점.
결점.
알고리즘 은 자 유 롭 게 전환 할 수 있다.
전략 류 가 많아 집 니 다.
다 중 조건 으로 판단 하 는 것 을 피하 다.
모든 전략 류 는 대외 적 으로 노출 되 어야 한다.
확장 성 이 양호 하 다
在这里插入图片描述
환경 류(Context):추상 적 인 전략 류 의 인용 을 가지 고 전략 을 조작 하 는 문맥 환경 을 가진다4.567917.추상 전략 류(Strategy):전략의 추상 류 나 인 터 페 이 스 는 필요 한 실현 인 터 페 이 스 를 제시한다구체 적 인 전략 류(Concrete Strategy):구체 적 인 전략 실현Demo
백조,거위,회색 거위,거 위 는 날 기,수영,짖 기 등 여러 가지 행동 을 한다.
백조 의 회색 거위 비행 능력 이 보통 이 라 고 가정 하면 거위 의 비행 능력 이 우수 하 다.백조 의 야생 거 위 는 수영 능력 이 보통 이 고,회색 거 위 는 수영 능력 이 우수 하 다.
먼저 첫 번 째 방법 을 살 펴 보 자.
在这里插入图片描述
이런 방법 은 물론 목적 을 실현 할 수 있 지만 문 제 는 분명 하 다.하위 클래스 가 부모 클래스 를 너무 많이 덮어 쓰 는 방법 은 코드 가 복용 되 지 않 고 결합 도가 매우 높다.정책 모드 를 사용 합 니 다.쉽게 말 하면 하위 클래스 를 인터페이스 로 밀봉 하고 부모 클래스 는 이 인 터 페 이 스 를 포함 하면 됩 니 다.
在这里插入图片描述
코드:

public interface FlyBehavior {
    void fly();
}
public class FlyGood implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("      ");
    }
}
public class FlyNormal implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("      ");
    }
}

public interface SwimBehavior {
    void swim();
}
public class SwimGood implements SwimBehavior {
    @Override
    public void swim() {
        System.out.println("   ");
    }
}
public class SwimNormal implements SwimBehavior {
    @Override
    public void swim() {
        System.out.println("    ");
    }
}

public abstract class Goose {
    //    
    FlyBehavior flyBehavior;
    SwimBehavior swimBehavior;
    //     ...
    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }
    public void setSwimBehavior(SwimBehavior swimBehavior) {
        this.swimBehavior = swimBehavior;
    }
}
public class Swan extends Goose{
    public Swan() {
        flyBehavior=new FlyNormal();
        swimBehavior=new SwimNormal();
    }
}
public class WildGoose extends Goose{
    public WildGoose() {
        flyBehavior=new FlyGood();
        swimBehavior=new SwimNormal();
    }
}
public class GreyGoose extends Goose{
    public GreyGoose() {
        flyBehavior=new FlyNormal();
        swimBehavior=new SwimGood();
    }
}

public class Client {
    public static void main(String[] args) {
        Swan swan=new Swan();
        swan.flyBehavior.fly();
        WildGoose wildGoose=new WildGoose();
        wildGoose.swimBehavior.swim();
        GreyGoose greyGoose=new GreyGoose();
        greyGoose.flyBehavior.fly();
        greyGoose.setFlyBehavior(new FlyGood()); //         
        greyGoose.flyBehavior.fly();
    }
}
실행 결과:
在这里插入图片描述
총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기