设计模式

一, 什么是设计模式

  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.谁占用的内存更高?
没有调用获取对象方法的时候
此时饿汉占用内存高于懒汉
调用了获取对象方法的时候
完全相同的内存

总结: 饿汉模式占用更高内存,但是比较省时间
懒汉模式占用更低内存,但是比较耗费时间

扩展: 并且饿汉模式的安全性要远远高于懒汉模式, 这点在我们学习线程的时候会和大家说明.

用法总结: 几乎大部分的程序设计场景中, 都是在使用牺牲内存换时间, 几乎只会使用饿汉模式

  

posted @ 2022-11-27 11:44  阿文程序猿  阅读(31)  评论(0)    收藏  举报