设计模式学习笔记(一) 单例模式

设计模式  

 

详细  

百度百科

https://baike.baidu.com/item/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1212549?fr=aladdin

维基百科

https://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA)

博客园

https://www.cnblogs.com/tongkey/p/7170826.html

慕课网

https://www.imooc.com/learn/112

------------------------------------------------------------------------------------------------------------------------------------------------

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:
为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
设计模式使代码编写真正工程化;
设计模式是软件工程的基石脉络,
如同大厦的结构一样。
 

综述

设计模式分为三种类型,共23种。
  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

------------------------------------------------------------------------------------------------------------------------------------------------

 

单例模式

 

有些对象只需要一个配置文件,工具类,线程池,缓存,日志对象等

创造多个实例,会产生问题

单例模式就是来确保某个实例有且只有一个

 

  • 懒汉模式
  • 饿汉模

 

Singleton.java

package com.imooc;
/*
 * 单例模式Singleton
 * 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆
 * 作用:保证整个应用程序中某个实例有且只有一个
 * 类型:饿汉模式、懒汉模式
 */
public class Singleton {
    //1.将构造方法私有化,不允许外部直接创建对象
    private Singleton(){        
    }
    
    //2.创建类的唯一实例,使用private static修饰
    private static Singleton instance=new Singleton();
    
    //3.提供一个用于获取实例的方法,使用public static修饰
    public static Singleton getInstance(){
        return instance;
    }
}

 

Singleton2.java

package com.imooc;
/*
 * 懒汉模式
 * 区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全
 *      懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
 */
public class Singleton2 {
    //1.将构造方式私有化,不允许外边直接创建对象
    private Singleton2(){
    }
    
    //2.声明类的唯一实例,使用private static修饰
    private static Singleton2 instance;
    
    //3.提供一个用于获取实例的方法,使用public static修饰
    public static Singleton2 getInstance(){
        if(instance==null){
            instance=new Singleton2();
        }
        return instance;
    }
}

 

Test.java

package com.imooc;

public class Test {
    public static void main(String[] args) {
        //饿汉模式
        Singleton s1=Singleton.getInstance();
        Singleton s2=Singleton.getInstance();
        if(s1==s2){
            System.out.println("s1和s2是同一个实例");
        }else{
            System.out.println("s1和s2不是同一个实例");
        }
        
        //懒汉模式
        Singleton2 s3=Singleton2.getInstance();
        Singleton2 s4=Singleton2.getInstance();
        if(s3==s4){
            System.out.println("s3和s4是同一个实例");
        }else{
            System.out.println("S3和s4不是同一个实例");
        }
        
    }
}

 

 

 

 

posted @ 2018-04-10 18:36  -Oreo  阅读(178)  评论(0编辑  收藏  举报