设计模式(三)——工厂模式
工厂模式提供了一种创建对象的最佳方式,单例模式也算是一种工厂模式。
简单工厂模式实现
public class A {
void create(){
System.out.println("A被创建了");
}
}
public class B {
void create() {
System.out.println("B被创建了");
}
}
工厂类
public class SimpleFactory {
public A createA() {
return new A();
}
public B createB(){
return new B();
}
}
Main方法
public class Main {
public static void main(String[] args) {
A a = new SimpleFactory().createA();
a.create();
B b = new SimpleFactory().createB();
b.create();
}
}
运行结果:
应用场景
上面这种写法好像看不出工厂模式的优点,反而好像更复杂了,
假如现在要求每次创建A的时候打印一次"A被创建了",这样的话,如果我们使用原来创建对象的方法每次创建新对象的时候就要多加一个Sout,使用工厂模式的话只需要在createA方法里面加就行了。
再比如,我要获取数据库连接,每次都要去加载驱动,获取连接,定义url,用户名密码等,这样的话,我用一个工厂把所有的步骤都写到工厂里面,返回一个定义好的对象,获取对象的时候只要调用工厂类就行了。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnecter {
/*
连接数据库
*/
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/renting?serverTimezone=UTC&characterEncoding=utf-8";
private String user = "root";
private String password = "123456";
public Connection getConnection() throws SQLException {
try {
Class.forName(driver);
} catch (java.lang.ClassNotFoundException cnfe) {
cnfe.printStackTrace();
System.out.println("驱动失败");
}
Connection conn = null;
//conn=DriverManager.getConnection(URL, "root", "12481632");
try {
conn = DriverManager.getConnection(url, user, password);
}catch(SQLException ex) {
System.out.println("数据库登录失败!");
}
return conn;
}
}