자바 디자인 모드-전략 모드 상세 설명
전략 모델(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();
}
}
실행 결과:총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.