专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java单例模式代码示例

Java单例模式代码示例

更新时间:2022-08-29 10:44:32 来源:动力节点 浏览1207次

了解单例模式的早期实例化

在这种情况下,我们在声明静态数据成员时创建类的实例,因此类的实例是在类加载时创建的。

让我们看一下使用早期实例化的Java单例模式的示例。

文件:A.java

A类 {  
 私有静态 A obj= new  A(); //早期,实例将在加载时创建   
 私有 A(){}     
 公共静态 A getA(){   
  返回 对象;  
 }    
 公共无效 doSomething(){   
 //写你的代码  
 }  
}  

理解单例模式的惰性实例化

在这种情况下,我们在同步方法或同步块中创建类的实例,因此在需要时创建类的实例。

让我们看一下使用惰性实例化的单例设计模式的简单示例。

文件:A.java

A类 {  
 私有静态 对象;   
 私有 A(){}  
   
 公共静态 A getA(){   
   如果 (obj ==  null ){  
      同步(单例。类){  
        如果 (obj ==  null ){  
            obj =  new  Singleton(); //实例将在请求时创建  
        }  
    }              
    }  
  返回 对象;  
 }    
 公共无效 doSomething(){   
 //写你的代码  
 }  
}  

了解单例模式的真实示例

我们将创建一个 JDBCSingleton 类。这个 JDBCSingleton 类包含它的私有构造函数和它自己的私有静态实例 jdbc。

JDBCSingleton 类提供了一个静态方法来获取它的静态实例给外界。现在,JDBCSingletonDemo 类将使用 JDBCSingleton 类来获取 JDBCSingleton 对象。

假设:你已经在mysql数据库中创建了一个包含uid、uname和upassword三个字段的表userdata。数据库名称是 ashwinirajput,用户名是 root,密码是 ashwini。

文件:JDBCSingleton.java

导入 java.io.BufferedReader;  
导入 java.io.IOException;  
导入 java.io.InputStreamReader;  
导入 java.sql.Connection;  
导入 java.sql.DriverManager;  
导入 java.sql.PreparedStatement;  
导入 java.sql.ResultSet;  
导入 java.sql.SQLException;    
类 JDBCSingleton {  
     //步骤1  
      // 创建一个 JDBCSingleton 类。  
     //静态成员只保存一个 JDBCSingleton 类的实例。               
         私有静态 JDBCSingleton jdbc;              
     //JDBCSingleton 防止来自任何其他类的实例化。  
       私有 JDBCSingleton() { }          
    //现在我们提供全局访问点。  
         公共静态 JDBCSingleton getInstance() {     
                                     如果 (jdbc== null )  
                                   {  
                                            jdbc=新的  JDBCSingleton();  
                                   }  
                         返回 jdbc;  
             }              
   // 从插入、视图等方法获取连接   
          私有静态 连接 getConnection()抛出 ClassNotFoundException、SQLException   
          {                  
              连接 con= null ;  
              Class.forName( "com.mysql.jdbc.Driver" );  
              con= DriverManager.getConnection( "jdbc:mysql://localhost:3306/ashwanirajput" ,  "root" ,  "ashwani" );  
              返回 骗局;                  
          }              
 //将记录插入数据库   
          public int  insert(String name, String pass) 抛出 SQLException   
          {  
              连接 c= null ;                  
              PreparedStatement ps= null ;                  
              int 记录计数器 = 0 ;                  
              试试 {                      
                      c=这个.getConnection();  
                      ps=c.prepareStatement( "插入用户数据(uname,uppassword)values(?,?)" );  
                      ps.setString( 1 , 名称);  
                      ps.setString( 2 ,通过);  
                      记录计数器=ps.executeUpdate();                          
              } 捕捉 (异常 e){ e.printStackTrace(); } 最后{  
                    如果 (ps!= null ){  
                      ps.close();  
                  } if (c!= null ){  
                      c.close();  
                  }   
              }  
             返回 记录计数器;  
          }    
//查看数据库中的数据        
      公共无效 视图(字符串名称) 抛出 SQLException    
      {  
                连接 con =  null ;  
        PreparedStatement ps =  null ;  
        结果集 rs =  null ;                    
                试试 {                        
                        con=这个.getConnection();  
                        ps=con.prepareStatement( "select * from userdata where uname=?" );  
                        ps.setString( 1 , 名称);  
                        rs=ps.executeQuery();  
                        而 (rs.next()){  
                                  System.out.println( "名称=" +rs.getString( 2 )+ "\t" + "Paasword=" +rs.getString( 3 ));                               
                        }                  
          } 捕捉 (异常 e){ System.out.println(e);}  
          最后{  
                    如果(rs!= null ){  
                        rs.close();  
                    } if  (ps!= null ){  
                      ps.close();  
                  } if (con!= null ){  
                      con.close();  
                  }   
                }  
      }          
     // 更新给定用户名的密码  
      公共int 更新(字符串名称,字符串密码) 抛出 SQLException {   
              连接 c= null ;  
              PreparedStatement ps= null ;                  
              int 记录计数器 = 0 ;  
              试试 {  
                      c=这个.getConnection();  
                      ps=c.prepareStatement( " 更新用户数据设置 uppassword=? where uname='" +name+ "'" );  
                      ps.setString( 1 ,密码);  
                      记录计数器=ps.executeUpdate();  
              } 捕捉 (异常 e){ e.printStackTrace(); } 最后{                        
                  如果 (ps!= null ){  
                      ps.close();  
                  } if (c!= null ){  
                      c.close();  
                  }   
               }  
             返回 记录计数器;  
          }              
// 从数据库中删除数据   
         公共int  delete( int  userid) 抛出 SQLException{   
              连接 c= null ;  
              PreparedStatement ps= null ;  
              int 记录计数器 = 0 ;  
              试试 {  
                       c=这个.getConnection();  
                      ps=c.prepareStatement( " 从用户数据中删除 uid='" +userid+ "'" );  
                      记录计数器=ps.executeUpdate();  
              } 捕捉 (异常 e){ e.printStackTrace(); }   
              最后{  
              如果 (ps!= null ){  
                      ps.close();  
             } if (c!= null ){  
                      c.close();  
              }   
           }  
             返回 记录计数器;  
          }  
 } // JDBCSingleton 类结束  

文件:JDBCSingletonDemo.java

导入 java.io.BufferedReader;  
导入 java.io.IOException;  
导入 java.io.InputStreamReader;  
导入 java.sql.Connection;  
导入 java.sql.DriverManager;  
导入 java.sql.PreparedStatement;  
导入 java.sql.ResultSet;  
导入 java.sql.SQLException;  
类 JDBCSingletonDemo{  
    静态整数 计数= 1 ;   
    静态整数  选择;   
    公共静态void  main(String[] args) 抛出 IOException {              
        JDBCSingleton jdbc= JDBCSingleton.getInstance();                      
        BufferedReader br= new  BufferedReader( new  InputStreamReader(System.in));  
   做{   
        System.out.println( "数据库操作" );  
        System.out.println( " ---------" );  
        System.out.println( "1.插入" );  
        System.out.println( "2.查看" );  
        System.out.println( " 3. 删除" );  
        System.out.println( " 4. 更新" );  
        System.out.println( " 5. 退出" );            
        System.out.print( "\n" );  
        System.out.print( "请输入您要在数据库中执行的选择:" );            
        选择=整数.parseInt(br.readLine());  
        开关(选择){                
           案例1 :{   
                    System.out.print( "请输入您要向数据库插入数据的用户名:" );  
                    字符串用户名=br.readLine();  
                    System.out.print( "输入你要插入数据到数据库的密码:" );  
                    字符串密码=br.readLine();                        
                    试试 {  
                            int  i= jdbc.insert(用户名,密码);  
                            如果 (i> 0 ) {  
                            System.out.println((count++) +  "数据插入成功" );  
                            }其他{  
                                System.out.println( "数据未插入" );      
                            }                            
                        } 捕捉 (异常 e){  
                          System.out.println(e);  
                        }                        
                     System.out.println( "按回车键继续..." );  
                     System.in.read();                         
                   } //案例1结束  
                   休息;  
            案例2 :{   
                    System.out.print( "请输入用户名:" );  
                    字符串用户名=br.readLine();                 
                    试试  {  
                            jdbc.view(用户名);  
                         } 捕捉 (异常 e){  
                          System.out.println(e);  
                        }  
                     System.out.println( "按回车键继续..." );  
                     System.in.read();                         
                   } //案例2结束  
                  休息;  
             案例3 :{   
                     System.out.print( "输入要删除的用户名:" );  
                     int  userid=Integer.parseInt(br.readLine());               
                     试试 {  
                            int  i=jdbc.delete(userid);  
                            如果 (i> 0 ) {  
                            System.out.println((count++) +  "数据删除成功" );  
                            }其他{  
                                System.out.println( "数据没有被删除" );      
                            }  
                          
                         } 捕捉 (异常 e){  
                          System.out.println(e);  
                         }  
                     System.out.println( "按回车键继续..." );  
                     System.in.read();                         
                    } //案例3结束  
                   休息;  
             案例4 :{   
                    System.out.print( "请输入您要更新的用户名:" );  
                    字符串用户名=br.readLine();  
                    System.out.print( "输入新密码" );  
                    字符串密码=br.readLine();                        
                    试试 {  
                            int  i= jdbc.update(用户名,密码);  
                            如果 (i> 0 ) {  
                            System.out.println((count++) +  "数据更新成功" );  
                            }                            
                        } 捕捉 (异常 e){  
                          System.out.println(e);  
                        }  
                     System.out.println( "按回车键继续..." );  
                     System.in.read();                        
                   } // 案例 4 结束  
                 休息;                     
             默认:  
                     返回;  
        }            
       } 而 (选择!= 4 );   
   }  
}  

输出

以上就是关于“Java单例模式代码示例”介绍,大家如果想了解更多相关知识,可以关注一下动力节点的Java视频教程,里面的课程内容从入门到精通,细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>