黑马程序员——java中关于单例设计模式和懒汉式多调用的问题
2013-05-25 01:27
543 查看
------- android培训、java培训、期待与您交流! ----------
1.给该类构造函数用private修饰,保证用户不能通过new()的方式创建对象。
2.在类中,创建一个私有并且静态的对象,保证用户不能通过直接访问,但类中的静态函数可以访问。
3.创建一个public的静态函数,返回该对象,供使用。
这样就保证了,不管有多少用户引用该对象,都是指向的同一个地址。
代码示例如下:
最后运行的结果是:
验证了单例模式的对象唯一性。
运行结果:
所谓单例模式就是说对象在内存中只能存在一个。如果有其他变量是该类对象,那么他们指向的是同一对象。
设计思想如下:1.给该类构造函数用private修饰,保证用户不能通过new()的方式创建对象。
2.在类中,创建一个私有并且静态的对象,保证用户不能通过直接访问,但类中的静态函数可以访问。
3.创建一个public的静态函数,返回该对象,供使用。
这样就保证了,不管有多少用户引用该对象,都是指向的同一个地址。
代码示例如下:
class SingleDemo { public static void main(String[] args) { Person p1 = Person.getPerson(); Person p2 = Person.getPerson(); p1.setName("张三"); p1.setAge(25); p2.setName("李四"); p1.setAge(28); System.out.println("p1的姓名是:" + p1.getName() + ",年龄是:" + p1.getAge()); System.out.println("p2的姓名是:" + p2.getName() + ",年龄是:" + p2.getAge()); } } class Person { private String name; private int age; private Person() { } private static Person p = new Person(); public static Person getPerson() { return p; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
最后运行的结果是:
验证了单例模式的对象唯一性。
上面的代码是单例模式的一种,称为饿汉式。就是先在类里创建一个实例,然后在公用方法中返回该对象。单例模式中还有另外一种形式就先不创建实例,只在公用方法中创建,当调用这个方法是才创建对象,这种模式成为单例模式的懒汉式。
代码如下:class Person { private Person() { } private static Person p = null; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static Person getInstance() { if (p == null) { p = new Person(); } return p; } } class LanhanSingle { public static void main(String[] args) { Person p1 = Person.getInstance(); Person p2 = Person.getInstance(); p1.setName("zhangsan"); p1.setAge(19); p2.setName("lisi"); p2.setAge(22); System.out.println("p1的名字是:" + p1.getName() + ",p1的年龄是:" + p1.getAge()); System.out.println("p2的名字是:" + p2.getName() + ",p2的年龄是:" + p2.getAge()); } }
运行结果:
相关文章推荐
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解
- 黑马程序员——Java基础---面向对象(对象的初始化、对象调用成员、单例设计模式)(4)
- java设计模式--解决单例设计模式中懒汉式线程安全问题
- Java——单例设计模式中懒汉式并发访问的安全问题
- 关于一些设计模式(面试小问题,Java篇)
- 黑马程序员——java小结_007_单例设计模式(懒汉式、饿汉式)
- 黑马程序员———单例设计模式-懒汉式关于线程安全以及要点
- 关于Java开发中设计模式的使用问题
- 黑马程序员-Java IO和装饰设计模式
- 黑马程序员_JAVA设计模式之简单工厂
- java关于23种设计模式的有趣见解
- 关于java设计模式的总结博客
- 黑马程序员_毕向东JAVA基础_设计模式&异常处理机制
- 完美解决单例设计模式中懒汉式线程安全的问题
- 关于java调用了windows的api函数的问题解答
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- 黑马程序员_java 设计模式的概述
- 黑马程序员JAVA基础-单例设计模式
- 关于Java的23种设计模式的有趣见解