黑马程序员技术交流社区
标题:
单态设计模式
[打印本页]
作者:
王广彬
时间:
2012-7-26 23:50
标题:
单态设计模式
单态设计模式都是在什么情况下使用? 对这一块不是很清楚.
作者:
王志明
时间:
2012-7-27 00:34
如果一个类只能有一个实例存在,那么这个类就要设计成单例模式的,目的就是不让外界创建这个类的实例,
但是又为了能够让外界使用到这个类的实例,那么就要在这个类中自己创建,再通过public static的一个方法将
实例提供给外界,不管外界获取多少次这个类的实例,都是同一个实例,这就是单利模式,在后面的学习中,
你会接触到工厂设计模式,那个就是典型的单利设计模式,比如,你要在项目的多个类中使用操作数据库的
对象,而创建这种对象又是很消耗资源的,那么,你就可以使用单利设计模式:
伪代码示例:
Pulbic class DBManager {
//在类加载是自己创建实例
private static final DBManager instance = new DBManager();
//数据库驱动管理对象
private DriverManager driverManager;
//构造器要私有化,防止外部创建实例
private DBManager() {
//加载数据库驱动
driverManager = Class.forName(DriverName);
}
//要将本类的实例提供给外界使用
public static DBManager getInstace() {
return instance;
}
//获得数据库链接
public Connection getConnection() {return driverManager.getConnection();}
//关闭数据库链接
public void close(Connection conn) {conn.close();}
}
//StudentDao
public class StudentDao {
//这里要用到DBManager
DBManager dbm = DBManager.getInstance();
}
//ThearchDao
public class ThearchDao {
//这里要用到DBManager
DBManager dbm = DBManager.getInstance();
}
//StudentDao和ThearchDao中得到的是同一个对象。。。
我写的伪代码,,看思想就可以了
作者:
黑马王冬冬
时间:
2012-7-27 01:46
1.如果一个类始终只能创建一个实例,则这个类被称为单例类(单态类)。
2.应用场景:在一些场景中,当要求不允许自由创建该类的对象,而只允许创建一个对象时,为了避免其他类自由创建该类的实例,我们将该类的构造器使用private修饰,从而将该类所有的构造器隐藏起来。
3.随之我们提供一个public方法作为该类的访问点,用于创建该类的对象,并使用static方法修饰(因为调用该方法前不存在对象,只能使用类来调用)。
4.单例类必须缓存已经创建的对象,否则该类无法知道是否曾经创建该对象,也就无法保证只创建一个对象。因此需要创建一个成员变量来保存已经创建的对象,并且变量需要被创建对象的静态方法访问,故该变量以static修饰。
范例如下:
public class Singleton {
private static Singleton sing;
private Singleton() {
}
public static Singleton getInstance() {
if (sing == null) {
sing = new Singleton();
}
return sing;
}
}
复制代码
作者:
张莹莹
时间:
2012-7-27 07:28
单例模式是为了保证一个类在内存中只有一个对象.
1.在单例模式中构造方法是私有的,这样就保证了其他类无法创建本类对象。
2.为了让其他类可以访问本类对象,在本类中添加了一个公共方法(getInstance()),并将此方法设为静态的,通过这个方法其他类可以使用本类对象,而不需要创建。
应用场景
:比如读取配置文件的对象,只需要一个,对数据库进行增删改的对象也应保证只有一个,还有游戏中起中央控制器作用的类,也应只有一个
单例模式的两种形态:饿汉式和懒汉式(见图片)
饿汉式.png
(13.69 KB, 下载次数: 34)
下载附件
2012-7-27 07:27 上传
饿汉式
懒汉式.png
(33.28 KB, 下载次数: 35)
下载附件
2012-7-27 07:27 上传
懒汉式
作者:
党巾水
时间:
2012-7-27 11:07
你希望程序使用者不能随意自己创建对象,只能获取一个单独的对象,即只有一个实例存在。可以通过私有化构造函数,再对外提供一个获取这个对象的函数解决。有的时候需要一个全局对象,比如多线程卖票,多少窗口卖,也只是那么多票。又比如系统日志,多线程访问一个程序,需要记录日志,你不希望到时候看到N多个日志文件实例吧?就把日志单例化。
作者:
乐凡
时间:
2012-7-27 11:12
很简单 就是为了保证对象在类中的唯一性 无论外部怎么调用,它所得到的对象都是唯一的
作者:
李菁
时间:
2012-7-27 13:17
只需要使用一个单独的资源,并且需要共享这个单独资源的状态信息时,就能用到单例模式。
如果程序中重复的创建了同一个类的很多对象,通过应用单例模式则可以很好的避免创建通常的对象。这可以减少系统用来创建对象的时间,也可以节省垃圾收集器用来释放这些实例的时间
例如一个播放器程序,当用户打开一个播放音乐界面,再想打开另一个音乐播放时,之前的界面就关闭了。这就是一个单利模式的具体应用
其实单例模式通常和工厂模式一起使用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2