简单工厂模式里通过参数不同创建不同的实例,创建实例的逻辑只存在于单一的工厂类静态方法里。工厂方法模式则将这些创建的实例的逻辑分放在“方法”中,工厂类也抽象出一个Factory接口,各个不同Product对应的ConcreteFactory类(实现了Factory接口)分别负责创建对应Product的实例。
工厂方法模式是简单工厂方法模式的进一步抽象,利用面向对象的多态将简单工厂模式里单一工厂负责生产所有产品转移到抽象工厂类/接口的子类里实现。如果需要新添加产品,只需添加产品对应的具体工厂类即可,而不需要修改已有的代码。
下面是工厂方法模式一个示例的类图:
可以看到针对不同的xxLog(产品),分别提供了一个xxLogFactory(具体工厂)。
现实示例(JDBC中的工厂方法):
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://loc
alhost:1433; DatabaseName=DB;user=sa;password=");
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from UserInfo");