工厂模式可以分为两种,一种是简单工厂,另外一种是抽象工厂。
简单工厂,用来集中生成对象示例的
例如,最常见的用法就是用来生成持久层对象;
public class SimpleFactory {
private static UserDao userDao = new UserDaoImpl();
public static UserDao getUserDao(){
return userDao;
}
}
抽象工厂:
- public abstract class AbstractDuckFactory {
- public abstract Quackable createMallardDuck();
- public abstract Quackable createRedheadDuck();
- public abstract Quackable createDuckCall();
- public abstract Quackable createRubberDuck();
- }
- public class CountingDuckFactory extends AbstractDuckFactory {
- public Quackable createMallardDuck() {
- return new QuackCounter(new MallardDuck());
- }
- public Quackable createRedheadDuck() {
- return new QuackCounter(new RedheadDuck());
- }
- public Quackable createDuckCall() {
- return new QuackCounter(new DuckCall());
- }
- public Quackable createRubberDuck() {
- return new QuackCounter(new RubberDuck());
- }
- }
抽象工厂,要想使用它,就必须首先实例化它,然后将它传入一些针对抽象类型所写的代码中。所以可以把客户从所使用的具体产品中解耦。