책임 체인 방식 으로 단 어 를 고르다
몇 개의 단 어 를 정 하고 다음 조건 에 맞 는 단 어 를 선택한다.
1: ss 포함
2: a 포함
3: ks 로 끝난다.
만약 당신 이 생각 하 는 것 이 for 순환 이 고, 그 다음 에 if (... & &... &) 라면 이 코드 들 을 어떻게 유지 하 는 지 는 말 할 필요 가 없습니다.
만약 판정 조건 을 새로 추가 하면, 예 를 들 어 길이 가 7 보다 커 야 한다.
아니면 제 생각 에는 조건 1 을 kk 포함 으로 바 꿔 주세요.
그래서 다음 방법 을 도 입 했 습 니 다. 책임 체인 방식 으로 코드 를 처리 하 는 것 은 다음 과 같다.
package searchword;
public abstract class Filter {
protected Filter successor;
public void setFilter(Filter successor){
this.successor=successor;
}
public abstract void execu(String text);
}
package searchword;
public class IsContain extends Filter {
private String word;
public IsContain(String word) {
this.word = word;
}
/**
* @param text
*
*/
public void execu(String text) {
if (text.indexOf(word) >= 0) {
if (this.successor != null)
this.successor.execu(text);
else {
System.out.println(text);
}
}
}
}
package searchword;
public class IsEnd extends Filter{
private String word;
public IsEnd(String word){
this.word=word;
}
/**
* @param text
*
*/
public void execu(String text) {
if(text.endsWith(word))
if(this.successor!=null)
this.successor.execu(text);
else {
System.out.println(text);
}
}
}
package searchword;
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
List<String> wordsList=new ArrayList<String>();
wordsList.add("asdfds");
wordsList.add("ssakkendks");
Filter isContainSS=new IsContain("ss");
Filter isContainA =new IsContain("a");
Filter endKs =new IsEnd("ks");
isContainSS.setFilter(isContainA);
isContainA.setFilter(endKs);
for (int i = 0; i < wordsList.size(); i++) {
isContainSS.execu(wordsList.get(i));
}
}
}
테스트 결 과 는 다음 과 같다.
ssakkendks
책임 체인 의 장점 은 요청 발송 자 와 수신 자 를 결합 시 켜 여러 대상 이 요청 을 받 을 수 있 도록 하 는 것 이다. 이 대상 을 하나의 체인 으로 연결 하고 이 체인 을 따라 요청 을 전달 하 며 대상 이 처리 할 때 까지
우 리 는 큰 성 과 를 거 둔 것 같 지만 또 새로운 문제 가 생 겼 다. 위의 각 조건 간 의 관 계 는 내 가 조건 단 어 를 하나 더 넣 고 end 로 끝내 거나 ks 로 끝내 고 싶다 면 어 떨 까?코드 는 어떻게 바 꿉 니까?
생각 이 있어 요. 그게 바로...
package searchword;
import java.util.List;
public class OrIsEnd2 extends Filter {
private List<String> words;
public OrIsEnd2(List<String> words) {
this.words = words;
}
@Override
public void execu(String text) {
for (int i = 0; i < words.size(); i++)
if (text.endsWith(words.get(i)))
if (this.successor != null)
this.successor.execu(text);
else
System.out.println(text);
}
}
테스트 결과
ssakkendks ssakkendbb
위의 방법 은 괜 찮 은 것 같 지만, 또 하나의 더 좋 은 방법 은 파이프 모델 을 이용 하여 이 문 제 를 처리 하 는 것 이다.
다음 에 우리 파이프 모드 에 대해 다시 이야기 합 시다.
참고 자료
파이프 필터 모드 (Pipe and Filter) 와 조합 모드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.