java单例设计模式
来源:互联网 发布:itunes windows xp 编辑:程序博客网 时间:2024/05/16 11:03
什么叫单例设计模式?
字面上的意思:单个实例模式。
那么,如何做到只有一个实例?
有一个真理:问题,都要从产生处去解决。
对象(即是实例)是如何产生的呢?是利用构造方法去创建的。
那么当我把构造方法私有化进行封装的时候,用户还可以任意的创建对象吗?不能了啊!!!解决~
<pre name="code" class="java">class SingleObjectDemo{private SingleObjectDemo(){System.out.println("我创建了一个对象~~~~");}}
好,这个问题解决了,可是另一个问题也就来了。那么在那里创建对象?
也很简单的就知道啊,私有化只能在本类里引用,那么就是说必须要在本类里创建了,别无选择。
class SingleObjectDemo{public static SingleObjectDemo d = new SingleObjectDemo(){};private SingleObjectDemo(){System.out.println("我创建了一个对象~~~~");}}
当我们创建好一个对象的时候,只能通过static修饰对象的引用,这样用户才能拿的到。
他也是一个引用属性,按照类里对属性进行封装的原则,我们要对属性进行私有化封装private;通过setter和getter方法来设置和获取。(setter在这里就不要了)
class SingleObjectDemo{private static SingleObjectDemo d = new SingleObjectDemo(){};private SingleObjectDemo(){System.out.println("我创建了一个对象~~~~");}public static SingleObjectDemo getSingleObjectDemo(){return d;}}
这样一个单例的设置模式就好了,下面我们来对它进行小小的测试。
class SingleObjectDemo{private static int count = 0;//记录创建对象个数。private int i = 1;//测试是否为同一对象的int值。private static SingleObjectDemo d = new SingleObjectDemo(){};private SingleObjectDemo(){System.out.println("我创建了一个对象~~~~");count ++;}public static SingleObjectDemo getSingleObjectDemo(){//返回一个对象return d;}public void print(){System.out.println("创建了对象数为:"+count+"\t现在i的值为:"+i);}public void add(){//改变i的值i++;}}class Test{public static void main(String args[]){SingleObjectDemo d1 =SingleObjectDemo.getSingleObjectDemo();//获取一个对象SingleObjectDemo d2 =SingleObjectDemo.getSingleObjectDemo();//获取一个对象SingleObjectDemo d3 =SingleObjectDemo.getSingleObjectDemo();//获取一个对象d1.print();//打印信息。d2.print();d3.print();d1.add();System.out.println("我现在改变d1所指向的对象中i的值--------------");d1.print();d2.print();d3.print();}}
测试结果为:
好了。
突然想了想,这只是无参数构造函数的单例哦。能不能写出有参数的单例?
我只能想到了下面的设置并获取有参数的实例的方法。
只需要改动为:
class SingleObjectDemo{//这里新增对象的属性private static int yyy;private static int xxx;private static int zzz;private static int count = 0;//记录创建对象个数。private int i = 1;//测试是否为同一对象的int值。private static SingleObjectDemo d = new SingleObjectDemo(){};private SingleObjectDemo(){System.out.println("我创建了一个对象~~~~");count ++;}public static SingleObjectDemo getSingleObjectDemo(int x,int y,int z){//返回一个对象xxx = x;yyy = y;zzz = z;return d;}public void print(){System.out.println("创建了对象数为:"+count+"\t现在i的值为:"+i);System.out.println("xxx:"+xxx+"yyy:"+yyy+"zzz:"+zzz);}public void add(){//改变i的值i++;}}class Test{public static void main(String args[]){SingleObjectDemo d1 =SingleObjectDemo.getSingleObjectDemo(1,2,3);//获取一个对象d1.print();SingleObjectDemo d2 =SingleObjectDemo.getSingleObjectDemo(4,5,6);//获取一个对象d2.print();SingleObjectDemo d3 =SingleObjectDemo.getSingleObjectDemo(7,8,9);//获取一个对象d3.print();d1.add();//改变iSystem.out.println("我现在改变d1所指向的对象中i的值--------------");d1.print();d2.print();d3.print();}}
输出结果:
...我只能做到这样了,其他的没想到。这其实也不算是一个成功的例子吧。。。
或许你们能想的到更好的办法!!!
想到的话,求指点哦!!!
0 0
- java 设计模式,单例设计模式
- java设计模式-单例设计模式
- java设计模式-单例设计模式
- Java设计模式 单例设计模式
- Java设计模式------单例设计模式
- java设计模式----->单例设计模式
- java设计模式:单例设计模式
- java设计模式-----单例设计模式
- Java设计模式----单例设计模式
- java设计模式-单例设计模式
- java设计模式:单例设计模式
- java 设计模式-单例设计模式
- Java设计模式--单例设计模式
- java设计模式---单例设计模式
- Java设计模式-单例设计模式
- JAVA设计模式:单例设计模式
- java-单例设计模式
- Java设计|单例模式
- 如何快速正确的安装 Ruby, Rails 运行环境
- 直方图均衡化原理
- 1018. Binary Apple Tree
- 87金融汇:如何理性看待互联网理财收益波动
- 关于工业级GPU C-model所使用的性能模拟器(preformance simulator)
- java单例设计模式
- poj 2299 线段树
- cocos2d-x3.2 多点缩放单点滑动
- eclipse 检查javascript
- WINAPI 函数 GetLocalTime
- 第八周项目6-本月有几天?
- int3中断指令机器码
- 第八周项目4-个人所得税计算器
- 根据条件删除std::list中元素的技巧