使用场景:
1. 静态方法虽同样是为了实例化对象, 但是在语法上不需要与类名保持一致, 则在命名上更加灵活 更容易表述实例化的目的
2. 可以将构造方法 private, 只通过静态工厂方法做实例化, 即不暴露构造器给客户端, 而在静态方法中可以做更多的事情 (比如单例, 根据参数值进行不同的实例化)
3. 可以将子类的实例作为返回结果, 在客户端无意识的情况下使用子类, 同时将子类保护起来客户端无法直接实例化子类, 且后续的升级可以在方法内实现, 客户端不会感知到.
4. 服务提供者框架
例子:
1.java 的 Collections 工具类是就是通过上面 3 的方法来实例化一些不能直接实例化的集合类型, 并且因为命名灵活, 容易使用
2.jdbc 的模式就是上述的 4. 在 DriverManager.getConnection 的方法中, 返回的是未指定的实例, 具体的类型要先由 Connection 的数据库提供商去实现然后注册到系统中:
加载驱动程序:
- Class.forName(driverClass);
- // 加载 MySQL 驱动
- Class.forName("com.mysql.jdbc.Driver");
- // 加载 Oracle 驱动
- Class.forName("oracle.jdbc.driver.OracleDriver");
获得数据库连接:
1 DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/fireway", "root", "root");
创建 Statement/PreparedStatement 对象:
- conn.createStatement();
- conn.prepareStatement(sql);
来源: http://www.bubuko.com/infodetail-3085413.html