集册 Java实例教程 使用ServiceLoader加载服务类

使用ServiceLoader加载服务类

欢马劈雪     最近更新时间:2020-01-02 10:19:05

562
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
使用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);

    }


}


展开阅读全文