35_Java中的设计模式简单了解

Java中的设计模式

注意:只是简单了解

设计模式(Design pattern)

​ 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解、保证代码可靠性

​ 设计模式和具体的语言无关,学习设计模式就是要建立面向对象的思想,尽可能的面向接口编程,低耦合,高内聚,使设计的程序可重复利用

单例设计模式

​ 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供

​ 在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能

如何保证类在内存中只有一个对象呢?(饿汉式)

​ 把构造方法私有

​ 在成员位置自己创建一个对象

​ 通过一个公共的方法提供访问

参考代码:

package com.itheima_01;

public class Student {
    //构造方式私有
    private Student(){}

    //创建一个对象
    //防止外界直接修改值,使用private修饰
    private final static Student s = new Student();

    //提供一个公共方法获取这个对象
    public static Student getStudent(){
        return s;
    }
}
package com.itheima_01;

public class StudentDemo {
    public static void main(String[] args){
//        Student s1 = new Student();
//        Student s2 = new Student();
//        System.out.println(s1 == s2);

        Student s1 = Student.getStudent();
        Student s2 = Student.getStudent();
        System.out.println(s1 == s2);
    }
}

懒汉式写法参考代码:

package com.itheima_02;
/*
    单例设计模式:
         饿汉式:类一加载就创建对象
         懒汉式:用的时候才去创建对象

    在开发中,我们使用饿汉式,因为这种方式不会出现线程安全问题

    产生线程安全问题的三要素:
         1、是否存在多线程环境
         2、是否有共享数据
         3、是否有多个线程操作共享数据
 */
public class Teacher {
    private Teacher(){}

    private static Teacher t = null;

    public synchronized static Teacher getTeacher(){    //使用关键字synchronized使方法加上锁
        //t1、t2、t3
        //当前一个线程还没有创建完毕时后一个也进来创建
        if(t == null){
            t = new Teacher();
        }

        return t;
    }
}
package com.itheima_02;

public class TeacherDemo {
    public static void main(String[] args) {
        Teacher t1 = Teacher.getTeacher();
        Teacher t2 = Teacher.getTeacher();

        System.out.println(t1 == t2);
        System.out.println(t1);
        System.out.println(t1);
    }
}

JDK中的单例设计模式示例:

package com.itheima_03;

import java.io.IOException;

/*
    static Runtime getRuntime() 返回与当前Java应用程序关联的运行时对象。
 */
public class RuntimeDemo {
    public static void main(String[] args) throws IOException {
        Runtime r1 = Runtime.getRuntime();
//        Runtime r2 = Runtime.getRuntime();
//
//        System.out.println(r1 == r2);

        /*
        public class Runtime {
            private Runtime(){}

            private static final Runtime currentRuntime = new Runtime();

            public static Runtime getRuntime() {
                return currentRuntime;
            }
        }
         */
        //将指令再cmd中进行运行
//        r1.exec("calc");  //打开计算机
//        r1.exec("notepad");   //打开记事本

//        r1.exec("shutdown -s -t 1000");   //定时关机
//        r1.exec("shutdown -a"); //取消关机计划
    }
}
posted @ 2023-01-07 10:16  如此而已~~~  阅读(12)  评论(0编辑  收藏  举报