提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
使用ServiceLoader加载服务类
import java.util.Iterator; import java.util.ServiceConfigurationError; import java.util.ServiceLoader;//来自 N o w J a v a . c o m import java.util.SortedMap; import java.util.TreeMap; public class DictionaryDemo { public static void main(String[] args) { DictionaryService dictionary = DictionaryService.getInstance(); System.out.println(DictionaryDemo.lookup(dictionary, "book")); System.out.println(DictionaryDemo.lookup(dictionary, "editor")); System.out.println(DictionaryDemo.lookup(dictionary, "xml")); System.out.println(DictionaryDemo.lookup(dictionary, "REST")); } public static String lookup(DictionaryService dictionary, String word) { String outputString = word + ": "; String definition = dictionary.getDefinition(word); if (definition == null) { return outputString + "Cannot find definition for this word.";//来 自 nowjava.com - 时代Java } else { return outputString + definition; } } } class DictionaryService { private static DictionaryService service; private ServiceLoader<Dictionary> loader; private DictionaryService() { loader = ServiceLoader.load(Dictionary.class); } public static synchronized DictionaryService getInstance() { if (service == null) { service = new DictionaryService(); } return service; } public String getDefinition(String word) { String definition = null; try { Iterator<Dictionary> dictionaries = loader.iterator(); while (definition == null && dictionaries.hasNext()) { Dictionary d = dictionaries.next(); definition = d.getDefinition(word); } } catch (ServiceConfigurationError serviceError) { definition = null; serviceError.printStackTrace(); } return definition; } } interface Dictionary { public String getDefinition(String word); } /** * * @author John O'Conner */ class ExtendedDictionary implements Dictionary { private SortedMap<String, String> map; /** * Creates a new instance of ExtendedDictionary */ public ExtendedDictionary() { map = new TreeMap<String, String>(); map.put("xml", "a document standard often used in web services, among other " + "things"); map.put("REST", "an architecture style for creating, reading, updating, " + "and deleting data that attempts to use the common " + "vocabulary of the HTTP protocol; Representational State " + "Transfer"); } @Override public String getDefinition(String word) { return map.get(word); } } /** * * @author John O'Conner */ class GeneralDictionary implements Dictionary { private SortedMap<String, String> map; /** Creates a new instance of GeneralDictionary */ public GeneralDictionary() { map = new TreeMap<String, String>(); map.put("book", "a set of written or printed pages, usually bound with " + "a protective cover"); map.put("editor", "a person who edits"); } @Override public String getDefinition(String word) { return map.get(word); } }