자바 디자인 모델 의 전략 모델 정의 와 용법 상세 설명

본 논문 의 사례 는 자바 전략 모델 의 정의 와 용법 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.정의:
일련의 알고리즘 을 정의 하여 그들 을 하나씩 포장 하고 서로 바 꿀 수 있 도록 한다.
2.장점:
(1)문맥(Context)과 구체 적 인 전략(Concrete Strategy)은 소나무 결합 관계 이기 때문에 문맥 은 그 가 특정한 실현 을 사용 하려 는 것 만 알 아야 한다.  Strategy 인터페이스 류 의 인 스 턴 스 이지 만 어떤 종류 인지 알 필요 가 없습니다.
(2)전략 모델 은 개폐 원칙 을 만족 시 킵 니 다.새로운 구체 적 인 유형 을 추가 할 때 문맥 류 의 코드 를 수정 하지 않 아 도 됩 니 다.문맥 은 새로운 구체 적 인 전략의 인 스 턴 스 를 참조 할 수 있 습 니 다.
3.실례:
다음은 하나의 문 제 를 통 해 전략 모델 을 상세 하 게 설명 하 겠 습 니 다.
실험 요구:
샤 오 딩 은 알 리 바 바 의 프로그래머 로 이날 프로젝트 매니저 는 그 에 게 이런 정 의 를 내 렸 다.

public class Worker {
  int id;
  String name;
  int age;
}

딩 군 이 보 니 이것 은 노동자 의 정의 가 아 닙 니까?번호 id,이름,나이 등 을 포함 합 니 다.
사장 은 한 무리의 노동자 중 가장 나이 가 많은 사람 을 찾 을 수 있 는 기능 이 필요 하 다 고 말 했다.방법 설명 은 다음 과 같 습 니 다.

Worker searchWorker(List<Worker> workers);

파라미터List<Worker> workers이 노동자 들 의 데이터 입 니 다.가장 나이 가 많은 근로 자 를 찾 으 면 이 Worker 대상 으로 돌아간다.workers 가 노드 가 없 을 때 null 로 돌아 갑 니 다.
답:
1.전략
정책 모드 에서 이 인 터 페 이 스 는 WorkStrategy 라 고 명명 되 었 습 니 다.(구체 적 인 문제 에서 이 이름 은 구체 적 인 문제 에 따라 명명 할 수 있 습 니 다)코드 는 다음 과 같 습 니 다.
WorkStrategy .java

import java.util.List;
public interface WorkStrategy {
  public Worker AgeAverage(List<Worker> list);
}

2.문맥
컨 텍스트 지향 정책 은 인 터 페 이 스 를 위 한 클래스 입 니 다.코드 는 다음 과 같 습 니 다:
MaxAge.java

import java.util.List;
public class MaxAge {
  WorkStrategy workstrategy;
  public void SetWorkStrategy(WorkStrategy workstrategy){
    this.workstrategy=workstrategy;
  }
  public Worker getFindMax(List<Worker> list){
    if(workstrategy!=null)
      return workstrategy.AgeAverage(list);
    else{
      return null;
    }
  }
}

3.구체 적 인 전략
구체 적 인 전략 은 WorkStrategy 인 터 페 이 스 를 실현 하 는 클래스 입 니 다.즉,인터페이스 에 있 는 abstract Worker 를 다시 써 야 합 니 다.
AgeAverage(Listlist)방법
코드 는 다음 과 같 습 니 다:
StrategyMaxAge.java

import java.util.List;
public class StrategyMaxAge implements WorkStrategy{
  @Override
  public Worker AgeAverage(List<Worker> list) {
    int fs[] = new int[list.size()];
    int maxage = 0;
    for (int j = 0; j < list.size(); j++) {
      fs[j]=list.get(j).getAge();
      if (fs[maxage] <= fs[j]) {
        maxage = j;
      }
    }
    return list.get(maxage);
  }
}

4.정책 모드 사용
Application.java

import java.util.ArrayList;
import java.util.List;
public class Application {
  public static void main(String[] args) {
    List<Worker> list = new ArrayList<>();
    list.add(new Worker(1, "  ", 30));
    list.add(new Worker(2, "  ", 40));
    list.add(new Worker(3, "  ", 33));
    MaxAge findage = new MaxAge();
    findage.SetWorkStrategy(new StrategyMaxAge());
    Worker findw = findage.getFindMax(list);
    System.out.println("      :");
    System.out.println("       :"+findw.getId()+" "+findw.getName()+" "+findw.getAge());
  }
}
class Worker{
  int id;
  String name;
  int age;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age =age;
  }
  public Worker(int id, String name, int age) {
    super();
    this.id = id;
    this.name = name;
    this.age = age;
  }
  public Worker() {
    super();
    // TODO Auto-generated constructor stub
  }
}

5.실행 결과:

더 많은 자바 관련 내용 에 관심 이 있 는 독 자 는 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기