자바 디자인 모델 의 전략 모델 정의 와 용법 상세 설명
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(List
코드 는 다음 과 같 습 니 다:
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.실행 결과:더 많은 자바 관련 내용 에 관심 이 있 는 독 자 는 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.