0

だからここに私が持っているものがあります:

Browser.java
BrowserFactory.java

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

SeleniumDriver.java

私が考えているのは、SeleniumDriver.javaがBrowserFactoryのクライアントであり、csvファイルを介して選択されたブラウザーに応じてブラウザーのインスタンスを作成するということです。

  1. ChromiumBrowser
  2. InternetExlorer
  3. FirefoxBrowser
  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 に答える