云主机安装多个网站,一个网站两个域名备案,wordpress媒体库现实不全,4d网站广告图用什么做的简介
单例模式#xff08;Singleton Pattern#xff09;是一种常用的软件设计模式#xff0c;该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中#xff0c;某个类只能出现一个实例时#xff0c;单例对象就非常适合。
优点 单例模式可以保证在全局…简介
单例模式Singleton Pattern是一种常用的软件设计模式该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中某个类只能出现一个实例时单例对象就非常适合。
优点 单例模式可以保证在全局内存中只有一个实例节省了系统资源。 单例模式可以避免对资源的多重占用例如一个写文件操作为了保证数据不会发生冲突必须确保只有一个实例在对它进行操作。 单例模式可以提供一个全局访问点对于一些需要频繁进行实例化和销毁的对象单例模式可以提高系统性能。
缺点 单例模式一般没有接口扩展困难若要扩展除非修改原代码。 单例模式对测试的支持不友好因为它们是静态的所以很难进行单元测试。 如果在应用程序的不同模块中过度使用单例可能会导致代码的耦合度高难以调试和维护。 单例模式可能会导致“单例依赖”情况如果一个类依赖于单例服务那么这个类在测试时可能很难被模拟或替换。
实现
懒汉式单例实例在第一次被使用时构建延迟初始化推荐使用。
/// summary
/// 单例模式-懒汉式
/// /summary
public class Singleton
{/// summary/// 可以把需要处理的逻辑放在构造函数中/// /summaryprivate Singleton(){}private static Singleton _instance null;private static readonly object _lock new object();public static Singleton GetInstance(){if (_instance null)//为了提升性能对象初始化之后能够并发{lock (_lock)//保证任意时刻只有一个线程可以进入{if (_instance null)//这里用于第一次初始化时的并发判断防止重复初始化{_instance new Singleton();}}}return _instance;}}
饿汉式1单例实例在类装载时通过静态构造函数构建急切初始化。预先加载法
/// summary
/// 单例模式-饿汉式
/// /summary
public class SingletonSecond
{/// summary/// 可以把需要处理的逻辑放在构造函数中/// /summaryprivate SingletonSecond(){}private static SingletonSecond _instance null;/// summary/// 由CLR调用且只调用一次会在程序第一次使用该类型之前/// /summarystatic SingletonSecond(){_instance new SingletonSecond();}public static SingletonSecond GetInstance(){return _instance;}
}
饿汉式1单例实例在类装载时通过静态字段构建急切初始化。预先加载法
/// summary
/// 单例模式-饿汉式
/// /summary
public class SingletonThird
{/// summary/// 可以把需要处理的逻辑放在构造函数中/// /summaryprivate SingletonThird(){}/// summary/// 静态字段也是由CLR保障的在程序第一次使用该类型之前完成初始化且只初始化一次/// /summaryprivate static SingletonThird _instance new SingletonThird();public static SingletonThird GetInstance(){return _instance;}
}
总结
懒汉式优点
避免了饿汉式的那种在没有用到的情况下创建实例资源利用率高不执行GetInstance()就不会被实例可以执行该类的其他静态方法。
懒汉式缺点
多线程使用时一定要注意加锁双if判断第一次加载时不够快多线程使用不必要的同步开销大。
饿汉式优点
不存在多线程并发的问题线程安全在类加载的同时已经创建好一个静态对象调用时反应速度快 。
饿汉式缺点 资源效率不高可能GetInstance()永远不会执行到但执行该类的其他静态方法,那么这个实例仍然初始化 。