单例模式

设计模式之单例模式

人走茶凉 提交于 2019-12-02 15:55:51
一、设计模式 1、设计模式分类 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 2、设计模式的六大原则 1)、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类, 2)、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现

设计模式:单例模式

蓝咒 提交于 2019-12-02 15:39:17
原文:https://www.cnblogs.com/android-blogs/p/5530239.html 优点: 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。 保持程序运行的时候该中始终只有一个实例存在内存中 public class Singleton { private static volatile Singleton instance = null; private Singleton(){ } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 要保证单例,需要做一下几步 必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化。 必须定义一个静态函数获得该单例 单例使用volatile修饰 使用synchronized 进行同步处理,并且双重判断是否为null,我们看到synchronized (Singleton.class)里面又进行了是否为null的判断,这是因为一个线程进入了该代码,如果另一个线程在等待

常用设计模式(单例,代理,工厂,观察者)

烂漫一生 提交于 2019-12-02 15:34:50
单例:线程池、任务管理器。 1.饿汉模式:类加载时就创建好单例对象,调用静态方法返回单例对象,不需要考虑多线程问题。 class Singleton{   private static singleInstance = new Singleton();   private Singleton(){}   public static Singleton getInstance(){     return singleInstance;   } } 2.懒汉模式:在调用方法时再创建单例对象 class Singleton{   private static volatile Singleton singleInstance = null;   private Singleton(){}   public static synchronized getInstance(){     if(singleInstance==null){     singleInstance = new Singleton();   }   return singleInstance;   } } 简单工厂模式: public class LenovoComputer extends Computer{ @Override public void start() { System.out.println(

java23种设计模式(三)单例模式

岁酱吖の 提交于 2019-12-02 14:25:26
原文地址:https://zhuanlan.zhihu.com/p/23713957 一、概述 1、什么是单例模式? 百度百科是这样定义的:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 我是这样理解的:单例模式就是只允许一个实例,最开始使用它的时候是C#中,我要实例化一个A窗体,但是有个需求就是A窗体必须是唯一,不管我在B窗体操作A窗体还是C窗体中操作A窗体都是如此,这时候就使用到了单例模式 2、单例模式分类 A、懒汉单例模式:在第一次调用的时候实例化本身,在并发环境下,可能出现多个本身对象。所以线程是不安全的 B、饿汉单例模式:在类初始化时,已经自行实例化一个静态对象,所以本身就是线程安全的 C、登记单例模式:通过一个专门的类对各单例模式的单一实例进行管理和维护 3、特点 A、 单例模式类只能有一个实例 B、 单例模式类必须自己创建自己的唯一实例 C、 单例模式类必须给所有其他对象提供这一实例 二、运用 1、懒汉单例模式 /** * 描述:懒汉单例模式<p> * 作者: kimball <p> * E-mail: kimballlu@foxmail.com <p> * 日期:2016-11-16 下午4:30:32 <p> */ public class Singleton { /** *

设计模式-单例模式

大城市里の小女人 提交于 2019-12-02 13:31:10
一、概念 单例模式是创建型模式。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法,单例模式的要点有三个: 1.类只有一个实例 2.必须自行创建这个实例 3.自行向整个系统提供这个实例 二、角色 只有一个单例角色,在单例类内部实现并且只生成一个实例,同时提供一个静态方法的getInstance()工厂方法获取实例;为了防止在外部对其实例化,将其构造函数设计为私有,这样就不可以在外面直接new了 三、模板代码 public class Singleton { private static Singleton instance=null;//不会立刻创建对象,省得没用到浪费 private Singleton() { } //静态公有方法 public static Singleton getInstance() { if(instance==null)//不能用于多线程,如果都通过if进入,就可能出现创建多个实例的问题 instance=new Singleton(); return instance; } } View Code public class Singleton { //最简单的写法,缺点在于实例在类初始化的时候就创建了, //如果在整个项目中都没有使用到该类,就会创建内存空间的浪费。 private

大话单例模式

橙三吉。 提交于 2019-12-02 11:16:43
标题概念 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式基本实现 懒汉模式 这是最基本的单例模式,实现了懒加载,但是多线程不安全,没有添加锁 synchronized ,严格意义上来说这不算是单例模式。 实现方式 public class Singleton { private static Singleton instance ; private Singleton ( ) { } public static Singleton getInstance ( ) { if ( instance == null ) { instance = new Singleton ( ) ; } return instance ; } } 饿汉式 线程安全,比较常用,但容易产生垃圾,因为一开始就初始化 实现方式 public class Singleton { private static Singleton instance = new Singleton ( ) ; private Singleton ( ) { }

单例设计模式小demo

帅比萌擦擦* 提交于 2019-12-02 10:46:44
回顾了一下单例设计模式,所谓单例设计模式,就是一个类只有一个实例,这句话在小红书上也接触到过,刚开始没有理解,而且这句话的潜在意识是一个类也可能会有多个实例,例如通过new关键字创建的实例,每一个实例都是不一样的,每一个实例都是指向不同的引用,而单例,就是一个类只能放回一个对象,无论调用多少次,如果存在已创建的实例,则返回的是undefine;废话不多说,上代码。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> #box1{ width:200px; height: 50px; background:blue; } #box1>span{ width:20px; height: 10px; background:red; margin-top: 40px; } #box1>#ok{ margin-right:10px; } #box1>#cancel{ margin-left:10px; } <

java之单例模式

ぐ巨炮叔叔 提交于 2019-12-02 09:15:16
一 . 定义 单例也叫单态模式, 当一个类被创建之后, 只能产生一个实例供外部访问, 并且提供一个全局访问的方法 单例的最终目的就是保证一个类在内存中只能有一个实例(对象) Java中频繁创建和销毁类对象都会占用一部分系统资源,使用单例模式可以提高性能 单例模式创建的对象不会被回收, 过多的单例容易造成内存溢出 二 . 创建过程 私有化构造方法 (使用private 修饰) 在其内部产生该类的实例化对象,并将其封装成private static 类型 定义一个静态的方法返回该类的实例 三 . 饿汉式 和 懒汉式 饿汉式举例 public class Singleton { //创建静态变量 private static Singleton singleton = new Singleton ( ) ; //私有构造方法 private Singleton ( ) { } //提供外部访问接口 public static Singleton getInstance ( ) { return singleton ; } } 懒汉式举例 public class Singleton { //创建静态变量 private static Singleton singleton ; //私有构造方法 private Singleton ( ) { } //提供外部访问接口 public

单例模式

徘徊边缘 提交于 2019-12-02 07:02:28
  单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式主要有两种实现方式: 饿汉式: class Single{ private static final Single s = new Single(); private Single(){} public static Single getInstance(){ return s; }} 顾名思义,程序一运行,就会加载该类实例。 final 关键字可加可不加,加了显得更严谨,表示处于内存中的常量池区域中; 懒汉式: class Single{  private static Single s = null;  private Single(){}  public static Synchronized Single getInstance(){    if(s == null){      s = new Single();    }  }}上面是最原本的懒汉式实现方式,但是同步锁会导致多线程时,每个线程都需要判断资源是否上锁,比较低效,优化后如下:class

剑指OFFER001单例模式

旧街凉风 提交于 2019-12-02 06:29:23
1.单例模式的作用 单例模式保证某个类只有一个实例,而且自行实例化并向整个系统提供这个实例; 2.单例模式的特点: (1)单例类只能有一个实例; (2)单例类必须自己创建自己唯一实例; (3)单例类必须给所有其他对象提供这一实例; 3.单例模式的用途 一般用于线程池、缓存、日志对象、对话框、驱动程序等; 4.单例模式的实现 4.单例模式的实现 public class Singleton { private static Singleton ourInstance; public synchronized static Singleton getInstance() { if (null == ourInstance) { ourInstance = new Singleton(); } return ourInstance; } private Singleton() {} } 步骤: (1)声明类的实例化对象; (2)设计获得实例化对象的方法(getInstance); (3)判断对象是否在内存空间中存在; (4)如果不存在,新建一个对象,并返回该对象; (5)如果存在,则返回对象; (加锁是为了保证线程安全,不发生抢占事件) 来源: https://blog.csdn.net/weixin_39919527/article/details/102730373