Java-设计模式-单例模式浅谈
2017-07-04 14:46
357 查看
《\(^o^)/》
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个好的办法就是,让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
单例模式应用的举例
任务管理器,当你打开你电脑的任务管理器时,会弹出一个对话框。
如果你再去打开任务管理器,就没有新的对话框弹出了。出现在你电脑上的任务管理器只有一个。
单例模式的好处
1.保证一个类仅有一个实例。
2.节省内存,因为它限制了实例的个数,有利于Java垃圾回收
单例模式的实现
饿汉模式
在类加载的时候立即创建该类的单例
如果这个单例在今后一段时间都不使用的话,会浪费大量的时间和空间
懒汉模式
只有需要产生这个实例的时候才去产生
今后再需要的时候,直接返回第一次创建好的实例即可。
看如下例子:
实现两数求和。
饿汉模式
方法类
测试类
运行结果
懒汉模式
方法类
测试类
运行结果
通过单例模式的两种模式比较,可以看出
懒汉模式是在需要的时候被创建,而饿汉模式是从开始就一直存在着。
懒汉模式可以理解为 我想吃,但是我懒。有饭,我才会张开嘴。
饿汉模式可以理解为 我很饿,我真的饿。喂我,嘴一直张着呢。
单例模式 (Singleton)
单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个好的办法就是,让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
单例模式应用的举例
任务管理器,当你打开你电脑的任务管理器时,会弹出一个对话框。
如果你再去打开任务管理器,就没有新的对话框弹出了。出现在你电脑上的任务管理器只有一个。
单例模式的好处
1.保证一个类仅有一个实例。
2.节省内存,因为它限制了实例的个数,有利于Java垃圾回收
单例模式的实现
饿汉模式
在类加载的时候立即创建该类的单例
如果这个单例在今后一段时间都不使用的话,会浪费大量的时间和空间
懒汉模式
只有需要产生这个实例的时候才去产生
今后再需要的时候,直接返回第一次创建好的实例即可。
看如下例子:
实现两数求和。
饿汉模式
方法类
package 单例模式; /* * 步骤:【创建】一个私有的静态的当前类的对象。 * 同时将该类的构造方法设定为私有的。 * 然后提供公共的静态的一个方法 getObj() 去访问私有的静态变量 */ public class MyClass { private static MyClass mc = new MyClass(); private MyClass(){ } public static MyClass getObj(){ return mc; } public int add(int x,int y){ return x+y; } }
测试类
package 单例模式; public class TestMyClass { public static void main(String[] args) { //实例化m1,m2 MyClass m1 = MyClass.getObj(); MyClass m2 = MyClass.getObj(); //如果 (m1==m2) 返回 true 说明m1和m2地址相同。 //也就是说他们取到的都是方法类中创建的对象mc,实现了单例。 //如果返回false,则没有实现。 System.out.println(m1==m2); //还可以通过查看比较两个对象的hash码 System.out.println(m1.toString()); System.out.println(m2.toString()); //使用方法求和 System.out.println(m1.add(10, 90)); } }
运行结果
懒汉模式
方法类
package 单例模式; /* * 步骤:【声明】一个私有的静态的当前类的对象。 * 同时将构造方法设为私有 * 然后提供公共的静态的一个方法 getBbj() 去访问私有的静态变量 * 在这个方法中判断对象是否被创建, * 如果已经被创建,直接使用 * 如果未被创建,先创建,再使用 */< a229 /span> public class MyClass2 { private static MyClass2 mc ; private MyClass2(){ } public static MyClass2 getObj(){ if(mc==null){ mc=new MyClass2(); } return mc; } public int add(int x,int y){ return x+y; } }
测试类
package 单例模式; public class TestMyClass { public static void main(String[] args) { MyClass2 m3 = MyClass2.getObj(); MyClass2 m4 = MyClass2.getObj(); System.out.println(m3==m4); System.out.println(m3.toString()); System.out.println(m4.toString()); System.out.println(m4.add(10, 90)); } }
运行结果
通过单例模式的两种模式比较,可以看出
懒汉模式是在需要的时候被创建,而饿汉模式是从开始就一直存在着。
懒汉模式可以理解为 我想吃,但是我懒。有饭,我才会张开嘴。
饿汉模式可以理解为 我很饿,我真的饿。喂我,嘴一直张着呢。
相关文章推荐
- Java设计模式浅谈
- java设计模式---浅谈2种工厂模式和单例模式
- 浅谈 java 设计模式--命令行模式(Command pattern)
- 浅谈23种java设计模式
- 浅谈java中的单态设计模式
- Java设计模式浅谈
- 浅谈 java 设计模式--装饰模式(Decorator pattern)
- 浅谈java中的单态设计模式
- 浅谈 java 设计模式--简单工厂模式(Simple Factory pattern)
- 黑马程序员_浅谈JAVA设计模式
- java设计模式---浅谈2种工厂模式和单例模式
- 浅谈 java 设计模式--抽象工厂模式(AbstractFactory pattern)
- 浅谈 java 设计模式--策略模式(Strategy pattern)
- 浅谈Java设计模式之---策略模式
- 浅谈BREW对面向对象,Windows,Java,设计模式的借鉴
- java设计模式---浅谈2种工厂模式和单例模式
- 浅谈 java 设计模式--构建模式(Builder pattern)
- 浅谈 java 设计模式--单例模式(Singleton pattern)
- JAVA的设计模式浅谈
- 浅谈Java设计模式之------代理模式