网站如何在google提交收录,品质好的网站制作,有哪些可以做策划方案的网站,app开发公司有前景么单例模式
1 、介绍#xff1a; 单例模式(Singleton)也叫单态模式#xff0c;是设计模式中最为简单的一种模式#xff0c;甚至有些模式大师都不称其为模式#xff0c;称其为一种实现技巧#xff0c;因为设计模式讲究对象之间的关系的抽象#xff0c;而单例模式只有自己一…单例模式
1 、介绍
单例模式(Singleton)也叫单态模式是设计模式中最为简单的一种模式甚至有些模式大师都不称其为模式称其为一种实现技巧因为设计模式讲究对象之间的关系的抽象而单例模式只有自己一个对象也因此有些设计大师并把把其称为设计模式之一。2 、应用场景 1. Windows的Task Manager任务管理器就是很典型的单例模式这个很熟悉吧想想看是不是呢你能打开两个windows task manager吗 不信你自己试试看哦~ 2. windows的Recycle Bin回收站也是典型的单例应用。在整个系统运行过程中回收站一直维护着仅有的一个实例。 3. 网站的计数器一般也是采用单例模式实现否则难以同步。 4. 应用程序的日志应用一般都何用单例模式实现这一般是由于共享的日志文件一直处于打开状态因为只能有一个实例去操作否则内容不好追加。 5. Web应用的配置对象的读取一般也应用单例模式这个是由于配置文件是共享的资源。 6. 数据库连接池的设计一般也是采用单例模式因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池主要是节省打开或者关闭数据库连接所引起的效率损耗这种效率上的损耗还是非常昂贵的因为何用单例模式来维护就可以大大降低这种损耗。 7. 多线程的线程池的设计一般也是采用单例模式这是由于线程池要方便对池中的线程进行控制。 8. 操作系统的文件系统也是大的单例模式实现的具体例子一个操作系统只能有一个文件系统。 9. HttpApplication 也是单位例的典型应用。熟悉ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式所有的HttpModule都共享一个HttpApplication实例.3、七种实现方法
1、 package Singleton;public class SingletonOne {private SingletonOne(){}private static class LazyHolder{private static final SingletonOne INSATNCEnew SingletonOne();}public static SingletonOne getInstance(){return LazyHolder.INSATNCE;}
}2、 package Singleton;public class SingletonTwo {private SingletonTwo(){};private static final SingletonTwo INSTANCEnew SingletonTwo();public static SingletonTwo getInstance(){return INSTANCE;}
}3、 package Singleton;public class SingletonThree {private static final SingletonThree instance ;static{try{instancenew SingletonThree();}catch(Exception e){throw new RuntimeException(an error occurred!);}}public static SingletonThree getInsance(){return instance;}private SingletonThree(){}
} 4、 package Singleton;public enum SingletonFour {INSTANCE;public void execute(String arg){}
} 5、 package Singleton;public class SingletonFive {private static volatile SingletonFive instance;private SingletonFive(){}public static SingletonFive getInstance(){if(instancenull){synchronized (SingletonFive.class) {if(instancenull){instancenew SingletonFive();}}}return instance;}
}6、 使用apache commons lang: LazyInitializerpublic class SingletonSix extends LazyInitializerComplexObject {Overrideprotected ComplexObject initialize() {return new ComplexObject();}}// Create an instance of the lazy initializerSingletonSix initializer new SingletonSix();...// When the object is actually needed:ComplexObject cobj initializer.get(); 7、 使用guavaprivate static final SupplierString tokenSup Suppliers.memoize(new SupplierString() {Overridepublic String get() {//do some initString result xxx;return result;}});