首先,设计模式就是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式
单例设计模式:
采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法.
如果我们要让类在一个虚拟机中只能产生一个对象,我们首先需要将类的构造器的访问权限设置为private.这样就不能在类的外部去new对象了,但在类的内部仍可以产生该类的对象.
这时只能调用该类的某个静态方法以返回类内部创建的对象
又因为静态方法只能访问类中的静态成员变量
所以指向类内部产生的该类对象的变量也必须定义成静态的
单例模式优点:减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决.
又分为懒汉式和饿汉式:
代码示例:
//懒汉式:
class Person{
// 1.私有化类的内部构造器
private Person() {
}
// 2.声明类静态对象,没有初始化
private static Person instance;
private static ReentrantLock lock = new ReentrantLock();
//3.声明public、static的返回当前类的方法
public static Person getInstance() {
if (instance == null) {
try {
lock.lock();
if (instance == null) {
instance = new Bankinstance();
}
} finally {
lock.unlock();
}
}
return instance;
}
//饿汉式
class Bank{
// 1.私有化类的构造器
private Bank() {
}
//2.内部创建类的静态对象
private static Bank instance = new Bank();
// 3.提供公共的静态方法,返回类的对象
public static Bank getInstance() {
return instance;
}
}
什么时候用什么时候造对象的是懒汉式
事先造好对象的是饿汉式
饿汉式与懒汉式的优缺:
饿汉式:
好处:天然就是线程安全的
坏处:对象加载时间过长.
懒汉式:
好处:延迟对象创建.
坏处:目前的写法,线程不安全.–>开发中需要注意线程安全问题
(多线程还没学到,学到的时候会回来修改o(╥﹏╥)o)
应用场景:
①网站的计数器:一般也是单例模式实现,否则难以同步.
②应用程序的日志应用: 这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加
③数据库连接池:因为数据库连接是一种数据库的资源
④读取配置文件的类
以及典型的单例模式应用:Application,任务管理器,回收站