0

所以这就是我所拥有的:

Browser.java
BrowserFactory.java

ChromiumBrowser.java
InternetExlorer.java
FirefoxBrowser.java
HTMLUnitBrowser.java

SeleniumDriver.java

我在想的是 SeleniumDriver.java 是 BrowserFactory 的客户端,它将根据通过 csv 文件选择的浏览器创建一个浏览器实例:

  1. 铬浏览器
  2. 互联网浏览器
  3. 火狐浏览器
  4. HTMLUnitBrowser
4

2 回答 2

2

你有很多方法来实现工厂。这取决于创建的复杂程度以及实体列表的固定程度。

枚举方式:

public enum BrowserType {
    CHROME {
        public Browser create() {
            return new ChromeBrowser();
        }
    },
    IE {
        public Browser create() {
            return new IeBrowser();
        }
    }
    public abstract Browser create();
}

// Factory is optional really, the enum does the job.
public class BrowserFactor {

    public Browser create(BrowserType type) {
        return type.create();
    }
}

地图/策略方式:

interface BrowserStrategy {
    Browser create();
}

public class ChromeBrowser implements BrowserStrategy {
    public Browser create() {
        return new ChromeBrowser();
    }
}

public class BrowserFactor {
    Map<String, BrowserStrategy> ctorStategy = ...; // I'd use DI, but this could be manually created.
    public Browser create(String type) {
        return type.create();
    }
}

映射/反射方式:

public class BrowserFactor {
    Map<String, Class<? extends Browser> clazz = ...; // I'd use DI, but this could be manually created.
    public Browser create(String type) {
        return clazz.newInstance();
    }
}

我的偏好是看看您的 DI 框架是否可以为您处理它。如果不:

  • 简单创建/固定实体集 - 枚举或映射/反射
  • 简单创建/期望实体集将分组 - 映射/反射
  • 复杂的创建 - 地图/策略。
于 2012-09-19T15:55:13.090 回答
0
int browserId = -1; // parse your CSV file and determine it.
Browser browser = BrowserFactory.getBrowserInstance(browserId);

public class ChromimumBrowser extends Browser {

            // Necessary code
}

所有其他浏览器类应该extends/implements Browser


public class BrowserFactory() {
     private static final int CHROME_BROWSER = 10;
     public Browser getBrowserInstance(int browserId) {
          Browser browser = null; 
          switch (browserId) {
             case CHROME_BROWSER:
                  browser = new ChromeBrowser();
                  break;
             ..
             ..
             default:
                    // Some fallout browser.
          }
     }
}
于 2012-09-18T16:49:47.783 回答