设计模式
一, 什么是设计模式
1.静态方法和属性的经典使用
2.设计模式是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式,设计模式就像是经典的棋谱,不同的棋局我们用不同的棋谱,免得我们再思考和摸索,
二, 什么是单例模式
1. 所谓的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2. 单例设计模式有两种方式: 1)饿汉式 2)懒汉式
三,单例设计模式的实现
步骤如下
1)构造器私有化 方式直接new
2) 类的内部创建对象 (该对象是static)
3) 向外暴露一个静态的公共方法
饿汉式: 创建了对象可能没有使用,就放在那 有点占资源
public class SingleTon01 { public static void main(String[] args) { Girl girl = Girl.staticGirl(); System.out.println(girl); } } class Girl{ private String name;
//为了能够在静态方法中,返回 gf 对象,需要将其修饰为 static //對象,通常是重量級的對象, 餓漢式可能造成創建了對象,但是沒有使用. private static Girl gf = new Girl("小红"); private Girl(String name) { this.name = name; } public static Girl staticGirl(){ return gf; } @Override public String toString() { return "Girl{" + "name='" + name + '\'' + '}'; } }
懒汉式的单例模式
public class SingleTon01 { public static void main(String[] args) { System.out.println(Cat.age); //如果调用属性,对象不会被加载 这就是懒汉式 // System.out.println(Cat.getInstance()); } } //步驟 //1.仍然構造器私有化 //2.定義一個 static 靜態屬性對象 //3.提供一個 public 的 static 方法,可以返回一個 Cat 對象 //4.懶漢式,只有當用戶使用 getInstance 時,才返回 cat 對象, 後面再次調用時,會返回上次創建的 cat 對象 // 從而保證了單例 class Cat{ private String name; public static int age = 18; private static Cat cat; private Cat(String name){ this.name = name; } public static Cat getInstance(){ if (cat == null){ cat = new Cat("小可爱"); } return cat; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; } }
单例模式:-----解决new过多对象的问题
保证对象有且只有一个
单例 --> 单个实例 --> 单个对象
饿汉模式(用的数量远远大于懒汉模式, 差个1000倍)
这个唯一的对象, 还没有调用获取方法获取的时候, 他就已经被创建了
不管你需不需要这个对象, 我都会先创建它
第一步:
构造器私有
第二步:
提供一个获取对象的方法,该方法声明成静态,无需对象调用
第三步:
接收本类引用,在属性位置赋值,该属性要声明成static
第四步:
把本类引用用private修饰,防止外部更改
懒汉模式
你不要这个对象我就不创建
第一步:
构造器私有
第二步:
提供一个获取对象的方法,该方法声明成静态,无需对象调用
方法内部进行判断,如果对象没有创建则第一次访问,创建出来并返回,第二次判断已经创建过,直接返回
第三步:
接收本类引用,在属性位置赋值,该属性要声明成static
第四步:
相同的地方:
只会持有一份对象
不同的地方:
1.调用获取对象方法的时候, 谁的运行速度更快?
第一次调用获取对象方法的时候
饿汉模式要远远快于懒汉模式, 根本原因, 饿汉模式省去了创建对象的时间, 因为对象在你执行获取方法之前就已经自动的创建出来了
第二次以及以后的调用
完全相同的时间, 如果较真一下,if语句也计时(实际上是低到忽略不计的), 那么饿汉模式仍然比懒汉快
2.谁占用的内存更高?
没有调用获取对象方法的时候
此时饿汉占用内存高于懒汉
调用了获取对象方法的时候
完全相同的内存
总结: 饿汉模式占用更高内存,但是比较省时间
懒汉模式占用更低内存,但是比较耗费时间
扩展: 并且饿汉模式的安全性要远远高于懒汉模式, 这点在我们学习线程的时候会和大家说明.
用法总结: 几乎大部分的程序设计场景中, 都是在使用牺牲内存换时间, 几乎只会使用饿汉模式

浙公网安备 33010602011771号