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);
}
}
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Oracle or the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
/**代码未完, 请加载全部代码(NowJava.com).**/
本文系作者在时代Java发表,未经许可,不得转载。如有侵权,请联系nowjava@qq.com删除。