原廠模式可以分為兩種,一種是簡單工廠,另外一種是抽象工廠。
簡單工廠,用來集中產生對象樣本的
例如,最常見的用法就是用來產生持久層對象;
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());
- }
- }
抽象工廠,要想使用它,就必須首先執行個體化它,然後將它傳入一些針對抽象類別型所寫的代碼中。所以可以把客戶從所使用的具體產品中解耦。