博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java枚举实现单例模式
阅读量:6877 次
发布时间:2019-06-26

本文共 2051 字,大约阅读时间需要 6 分钟。

hot3.png

   

 

        单例模式约束一个类只能实例化一个对象。在中,为了强制只实例化一个对象,最好的方法是使用一个枚举量。这个优秀的思想直接源于Joshua Bloch的《》(《Java高效编程指南》)。如果你的藏书室里还没有这本书,请搞一本,它是迄今为止最优秀的Java书籍之一。

        这里有几个原因关于为什么在Java中宁愿使用一个枚举量来实现单例模式:

       1、 自由序列化;

       2、 保证只有一个实例(即使使用反射机制也无法多次实例化一个枚举量);

       3、 线程安全;

/**  * 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;      }    }  

        如何使用:

  

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

        关于单列模式的使用,请不要过分地使用它们,但是当你需要使用的时候,使用枚举量是最佳的方法。你可以从我发布在github上的库中获取其他相关代码。

        同时本文也和策略模式()一文相关。

转载于:https://my.oschina.net/aslanjia/blog/1093931

你可能感兴趣的文章
德国博世百年风雨启示录(下):实业强国
查看>>
(整理)用Elixir做一个多人扑克游戏 4
查看>>
关于架构
查看>>
The application’s PagerAdapter changed the adapter’s contents without calling PagerA
查看>>
qcom 跨平台的串口调试工具 PKGBUILD
查看>>
Delphi 时间格式化,动态显示时间,显示最新时间
查看>>
在JAVA中将NEW一分为2,分步进行[反射机制产生类]
查看>>
Java多态性的两个特殊情况
查看>>
我的友情链接
查看>>
怎么改变Win7登陆背景图片
查看>>
虚拟带库和物理带库比较
查看>>
AD委派加域权限
查看>>
在Delphi 7中使用加密的SQLite
查看>>
wordpress 无用的RSS Feed Cache
查看>>
Linux Vi编辑器的基本使用方法
查看>>
HTTP头域列表与解释 之 response篇
查看>>
一切属他,则名为苦;一切由己,自在安乐。
查看>>
velocity 之坑:不同枚举类(enum)有相同的静态(static)方法,无法访问第二个枚举类...
查看>>
图的遍历方法(深度优先和广度优先算法)
查看>>
鸟巢-一种全新的Native APP开发模式,这篇文章为您解读
查看>>