javaSE-(设计模式)

1、什么叫设计模式:设计模式的概念首先来源于其它行业:建筑业,在早起建房子的时候,肯定是经验缺乏、显得杂乱无序的,这就会造成很多问题,在行业发展过程,通过不断的经验积累,前辈们针对这些问题提出了合理解决方案,这就是设计模式,参照设计模式往往可以解决很多问题,在计算机编程方面,也会出现类似问题,所以牛人们把这些解决问题的方案进行归类和总结,形成了面向对象编程的23种设计模式。

2、单例模式(特点):

Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更优雅。

一、(饿汉式):
[java]  view plain  copy
  1. public class Singleton {  
  2.     private static Singleton instance = new Singleton();  
  3.     private Singleton(){};  
  4.     public static Singleton getInstance(){  
  5.         return instance;  
  6.     }  
  7. }  

这个时候我们以为掌握了单例模式,其实是掌握了,但仅仅是单例设计模式的一种写法,如上写法称为”饿汉式“,因instance是静态成员变量,所以在jvm对该类加载过程中,就进行对象的实例化,所以是提前创建实例。

另外一种写法,就是在getInstance调用时才进行对象的创建,这种写法又称为”延迟加载“或者”懒汉式“。

二、懒汉式(延迟加载)。
[java]  view plain  copy
  1. public class Singleton {  
  2.     private static Singleton instance = null;  
  3.     private Singleton(){};  
  4.     public static Singleton getInstance(){  
  5.         if(instance == null){  
  6.             instance = new Singleton();  
  7.         }  
  8.         return instance;  
  9.     }  
  10. }  

问题:懒汉式的写法,在多线程中会出现问题,即创建多个对象,如下图所示:

[java]  view plain  copy
  1. public class Singleton {  
  2.     private static Singleton instance = null;  
  3.     private Singleton(){};  
  4.     public static Singleton getInstance(){  
  5.         if(instance == null){  
  6.             --> 一个A线程进入并挂起。  
  7.             --> 此时一个B线程进入,这种情况会造成两个线程都会执行new Singleton操作,这样就会在内存存在多个该类对象。  
  8.             instance = new Singleton();  
  9.         }  
  10.         return instance;  
  11.     }  
  12. }  

解决方案:加锁。

三、懒汉式同步锁(懒汉式线程不安全的解决方案)。
[java]  view plain  copy
  1. public class Singleton {  
  2.     private static Singleton instance = null;  
  3.     private Singleton(){};  
  4.     public static synchronized Singleton getInstance(){  
  5.         if(instance == null){  
  6.             instance = new Singleton();  
  7.         }  
  8.         return instance;  
  9.     }  
  10. }  

5、单例模式的使用:
如果仅仅如上面所示的方式 ,去创建这些代码是没有意义,正确使用单例模式的方式就是在原有代码上,加上这些代码。

添加单例模式前:

[java]  view plain  copy
  1. public class Test {  
  2.     public static void main(String[] args){  
  3.         Person p1 = new Person();  
  4.         p1.setName("Jack");  
  5.         p1.setAge(18) ;  
  6.         Person p2 = new Person();  
  7.         p2.setName("David");  
  8.         p2.setAge(20);  
  9.           
  10.         System.out.println(p1.getName() + ":" + p1.getAge());  
  11.         System.out.println(p2.getName() + ":" + p2.getAge());  
  12.     }  
  13. }  
  14.   
  15. class Person{  
  16.     private String name ;  
  17.     private int age;  
  18.           
  19.     public void setName(String name){  
  20.         this.name = name;  
  21.     }  
  22.     public String getName(){  
  23.         return name;  
  24.     }  
  25.       
  26.     public void setAge(int age){  
  27.         this.age = age;  
  28.     }  
  29.     public int getAge(){  
  30.         return age;  
  31.     }  
  32.       
  33. }  

运行结果:

Jack:18
David:20

单例模式后:

[java]  view plain  copy
  1. public class Test {  
  2.     public static void main(String[] args){  
  3.         Person p1 = Person.getInstance();  
  4.         p1.setName("Jack");  
  5.         p1.setAge(18) ;  
  6.         Person p2 = Person.getInstance();  
  7.         p2.setName("David");  
  8.         p2.setAge(20);  
  9.           
  10.         System.out.println(p1.getName() + ":" + p1.getAge());  
  11.         System.out.println(p2.getName() + ":" + p2.getAge());  
  12.     }  
  13. }  
  14.   
  15. class Person{  
  16.     private String name ;  
  17.     private int age;  
  18.       
  19.     private static Person instance = new Person();//2.本类中创建该类的对象  
  20.     private Person(){};//1.私有构造函数  
  21.     public static Person getInstance(){//3.创建一个方法,向外部提供该类的对象  
  22.         return instance;  
  23.     }  
  24.       
  25.     public void setName(String name){  
  26.         this.name = name;  
  27.     }  
  28.     public String getName(){  
  29.         return name;  
  30.     }  
  31.       
  32.     public void setAge(int age){  
  33.         this.age = age;  
  34.     }  
  35.     public int getAge(){  
  36.         return age;  
  37.     }  
  38.       
  39. }  

运行结果:

David:20
David:20

目的保证了对象的唯一性



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值