예제 3-2는 2장의 SearchEngine 구현체를 보여준다. MySearchEngine은 많은 코드와 데이터를 클래스 안에 포함한다. 달리 말하면, 각 문서와 그 유형을 손수 추가하고 있다. 그럼 더 많은 문서 유형이나 메서드를 추가하고 싶은 경우에는 어떻게 될까? 새로운 변경이 생길 때마다 반복해서 편집하고 다시 컴파일해야 한다. 결국 너무 많은 수고가 든다!
예제 3-2 MySearchEngine.java
package com.apress.isf.java.service;
import java.util.ArrayList;
import java.util.List;
import com.apress.isf.java.model.Document;
import com.apress.isf.java.model.Type;
import com.apress.isf.java.service.SearchEngine;
public class MySearchEngine implements SearchEngine {
@Override
public List<Document> findByType(Type documentType) {
List<Document> result = new ArrayList<Document>();
for (Document document : storage()) {
if (document.getType().getName().equals(documentType.getName()))
result.add(document);
}
return result;
}
@Override
public List<Document> listAll() {
return storage();
}
private List<Document> storage() {
List<Document> result = new ArrayList<Document>();
Type type = new Type();
type.setName("PDF");
type.setDesc("Portable Document Format");
type.setExtension(".pdf");
Document document = new Document();
document.setName("Book Template");
document.setType(type);
document.setLocation("/Users/felipeg/Documents/Random/Book Template.pdf");
result.add(document);
document = new Document();
document.setName("Sample Contract");
document.setType(type);
document.setLocation(
"/Users/felipeg/Documents/Contracts/Sample Contract.pdf");
result.add(document);
type = new Type();
type.setName("NOTE");
type.setDesc("Text Notes");
type.setExtension(".txt");
document = new Document();
document.setName("Clustering with RabbitMQ");
document.setType(type);
document.setLocation(
"/Users/felipeg/Documents/Random/Clustering with RabbitMQ.txt");
result.add(document);
type = new Type();
type.setName("WEB");
type.setDesc("Web Link");
type.setExtension(".url");
document = new Document();
document.setName("Pro Spring Security Book");
document.setType(type);
document.setLocation("http://www.apress.com/9781430248187");
result.add(document);
return result;
}
}