网站建设服务费要不要折旧呢,平台网站建设教程,重庆短视频制作公司,网站建设公司专业网站制作开发单例模式#xff1a;程序自始至终只创建一个对象。 应用场景#xff1a;1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案#xff1a; 双重检查加锁机…单例模式程序自始至终只创建一个对象。 应用场景1.整个程序运行中只允许一个类的实例时 2.需要频繁实例化然后销毁的对象 3.创建对象时耗时过多但又经常用到的对象 4.方便资源相互通信的环境 懒汉式线程不安全问题解决方案 双重检查加锁机制 既可实现线程安全又可使性能不受到很大的影响所谓“双重检查”指的是并非每次调用getInstance方法都需要同步进入方法后先检查实例是否存在不存在的情况下才进入下面的同步块这是第一层检查。进入同步块后再次进行检查实例是否存在如果不存在则在同步块内创建实例这是第二次检查。 双重检查机制实现会使用volatile,它的意思是被volatile修饰的变量的值将不会被本地缓存所有对该变量的读写都直接操作共享内存从而确保多个线程能正确处理该变量。 public class LazySingleton { private static volatile LazySingleton dl null; private LazySingleton() { } public static LazySingleton getInstance() { if (dl null) { synchronized (LazySingleton.class) { if (dl null) { dl new LazySingleton(); } } } return dl; }
}
内部类解决延迟加载线程安全 public class SingletonInner { /** * 内部类实现单例模式 * 延迟加载减少内存开销 */ private static class SingletonHolder { private static SingletonInner instance new SingletonInner(); } /** * 私有的构造函数 */ private SingletonInner() {} public static SingletonInner getInstance() { return SingletonHolder.instance; } protected void method() { System.out.println(SingletonInner); }
} 单例模式实际应用 1.Spring中bean默认是单例模式 2.网站的计数器 3.应用程序的日志应用 4.web应用的配置读取由于配置文件是共享的资源。 5.数据库连接池设计 6.多线程的线程池 2.工厂模式这是一种创建型模式它提供了一种创建对象的最佳方式通过一个共通的接口来指向新创建的对象创建对象不再是由当前类实例化而是由工厂类完成在工厂中只需告知对象类型即可工厂模式中必须依赖接口。 实际应用1.数据库工厂不同语言 3.观察者模式当一个对象被其他多个对象所依赖当一个对象发生变化时其他依赖该对象的对象都会收到通知并随着变化比如警报、微信公众号推送自动通知每个订阅的客户 4.代理模式一个代理类代表一个真实类的访问 实际应用1.数据库工厂不同语言 5.适配器模式用于解决软件实体间的接口不兼容问题。 6.策略模式定义一系列算法将它们统一封装起来并且使他们可以相互替换策略模式的重心不是如何实现这些算法而是如何组织、调用这些算法使程序更灵活、可维护、可扩展 7.职责链模式请假流程使多个对象都有机会处理请求从而避免请求的发送者和接受者之间的耦合关系。在职责链模式中很多对象由某一个对象对下家的引用而连接起来形成一条链请求在这个链上传递直到链上的某个对象处理此请求 8.模版方法模式由两部分组成抽象父类和具体的子类完成通常在抽象父类中封装了子类的算法框架包括一些公共方法以及子类的方法执行顺序。子类通过继承这个抽象类也继承了整个算法结构并且可以选择重写父类中的方