第一类模式:创建者模式
创建型模式的主要关注点是“怎么样创建对象?”,它的主要关注点是“将对象的创建与使用分离”。
这样可以降低系统的耦合度,使用者不需要关注 对象的创建细节。
创建型模式分为:
单例模式
工厂方法模式
抽象工程模式
原型模式
建造者模式
单例设计模式
单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式的结构
单例模式主要有以下角色:
单例类。只能创建一个实例的类
访问类。使用单例类
单例模式的实现
单例设计模式分类两种:
饿汉式:类加载就会导致该单实例对象被创建
懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建
饿汉式-方式1(静态成员变量)
1 package com.itheima.pattern.singleton.demo1; 2 3 /** 4 * 创建者模式-单例设计模式 5 * 饿汉式:静态成员变量 6 */ 7 public class Singleton { 8 9 // 1、私有构造方法 10 private Singleton() {} 11 12 // 2、在本类中创建本类对象 13 private static Singleton singleton = new Singleton(); 14 15 // 3、提供一个公共的访问方式,让外界获取该对象 16 public static Singleton getInstance() { 17 return singleton; 18 } 19 }
1 package com.itheima.pattern.singleton.demo1; 2 3 /** 4 * 创建者模式-单例设计模式 5 * 饿汉式:静态成员变量 6 */ 7 public class Client { 8 public static void main(String[] args) { 9 // 创建Singleton类对象 10 Singleton singleton1 = Singleton.getInstance(); 11 Singleton singleton2 = Singleton.getInstance(); 12 // 判断获取到的两个对象是否是同一个对象 13 System.out.println(singleton1 == singleton2); 14 } 15 }
该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象singleton。singleton对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存的浪费。
饿汉式-方式2(静态代码块方式)
1 package com.itheima.pattern.singleton.demo2; 2 3 /** 4 * 创建者模式-单例设计模式 5 * 饿汉式:静态代码块 6 */ 7 public class Singleton { 8 9 // 1、私有构造方法 10 private Singleton() {} 11 12 // 2、声明Singleton类型的变量 13 private static Singleton singleton; 14 15 // 3、在静态代码块中进行赋值 16 static { 17 singleton = new Singleton(); 18 } 19 20 // 4、提供一个公共的访问方式,让外界获取该对象 21 public static Singleton getInstance() { 22 return singleton; 23 } 24 }
1 package com.itheima.pattern.singleton.demo2; 2 3 /** 4 * 创建者模式-单例设计模式 5 * 饿汉式:静态代码块 6 * 测试类 7 */ 8 public class Client { 9 public static void main(String[] args) { 10 // 创建Singleton类对象 11 Singleton singleton1 = Singleton.getInstance(); 12 Singleton singleton2 = Singleton.getInstance(); 13 // 判断获取到的两个对象是否是同一个对象 14 System.out.println(singleton1 == singleton2); 15 } 16 }
该方式在成员位置声明Singleton类型的静态变量,而对象的创建是在静态代码块中,也是随着类的加载而创建。所以和饿汉式的方式1基本一样,当然该方式也存在内存浪费问题。
标签:Singleton,对象,创建,singleton,单例,设计模式 From: https://www.cnblogs.com/record-100/p/18461655