设计模式-工厂方法模式

http://ov1nop9io.bkt.clouddn.com/bf0ff9fc-467e-4a3f-8922-115ba2c55bde.png

定义一个创建对象的接口,但是由子类决定要实例化那个类,工厂方法把实例化推迟到子类,主要解决接口选择的问题

  • 实例:java.util.Collection 接口的 iterator 方法,hibernate里通过sessionFactory创建session,

  • 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

  • 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时

  • 在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象

1
2
3
4
5
6
7
8

public abstract class Factory {
public abstract Product factoryMethod();
public void doSomething(){
Product product = factoryMethod();
}
}

1
2
3
4
5
6
7
8
9


public class ConcreteFactory extends Factory {
@Override
public Product factoryMethod() {
return new ConcreteProduct();
}
}

1
2
3
4
5
6
public class ConcreteFactory2 extends Factory {
@Override
public Product factoryMethod() {
return new ConcreteProduct2();
}
}