zoukankan      html  css  js  c++  java
  • The Java Enum: A Singleton Pattern [reproduced]

    The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this, the best approach is to use an enum. This great idea comes straight from the book Effective Java by Joshua Bloch. If you don't have it in your library, get it. One of the best Java books to date.

    There are a few reasons why one would use an enum as a singleton in Java:

        -Serialization for free.
        -Guaranteed one instance (Cannot instantiate more then one enum even through reflection.)
        -Thread safe

    /**
     * Example of a Java Singleton.
     * It is suggested to use an enum as a singleton. The Class
     * cannot be instantiated more then once, specifically when
     * using reflection.
     *
     * @author keaplogik
     */
    public enum AnimalHelperSingleton {

        INSTANCE;

        private AnimalHelperSingleton(){

        }

        public Animal[] buildAnimalList(){
            final Animal[] animals = new Animal[10];

            animals[0] = new SimpleAnimal(Animal.AnimalClass.MAMMAL,
                    "Dog", true, Color.GRAY);
            animals[1] = new SimpleAnimal(Animal.AnimalClass.MAMMAL,
                    "Cat", true, Color.YELLOW);
            animals[2] = new SimpleAnimal(Animal.AnimalClass.AMPHIBIAN,
                    "Frog", true, Color.GREEN);
            animals[3] = new SimpleAnimal(Animal.AnimalClass.BIRD,
                    "Crow", true, Color.BLACK);
            animals[4] = new SimpleAnimal(Animal.AnimalClass.BIRD,
                    "Cardinal", true, Color.RED);
            animals[5] = new SimpleAnimal(Animal.AnimalClass.ARTHROPOD,
                    "Mantis", false, Color.GREEN);
            animals[6] = new SimpleAnimal(Animal.AnimalClass.ARTHROPOD,
                    "Spider", false, Color.ORANGE);
            animals[7] = new SimpleAnimal(Animal.AnimalClass.MAMMAL,
                    "Tiger", true, Color.ORANGE);
            animals[8] = new SimpleAnimal(Animal.AnimalClass.MAMMAL,
                    "Bear", true, Color.BLACK);
            animals[9] = new SimpleAnimal(Animal.AnimalClass.BIRD,
                    "Owl", true, Color.BLACK);

            return animals;
        }

    }

    And in use:

    //Call singleton to build the animal list.
    Animal[] animals = AnimalHelperSingleton.INSTANCE.buildAnimalList();

    From:

    http://keaplogik.blogspot.sg/2013/12/the-java-enum-singleton-pattern.html

  • 相关阅读:
    对计算机科学与技术专业的认识及未来的规划
    秋季学期学习总结
    自我介绍
    Leetcode每日一题 83. 删除排序链表中的重复元素
    Leetcode每日一题 82. 删除排序链表中的重复元素 II
    Leetcode每日一题 456.132 模式
    Leetcode每日一题 341. 扁平化嵌套列表迭代器
    Leetcode每日一题 191. 位1的个数
    Leetcode每日一题 73. 矩阵置零
    Leetcode每日一题 150. 逆波兰表达式求值
  • 原文地址:https://www.cnblogs.com/pugang/p/5780504.html
Copyright © 2011-2022 走看看