【问题标题】:What is the Difference in the below two set of code以下两组代码有什么区别
【发布时间】:2013-12-03 10:33:08
【问题描述】:

我已经开始学习 Java 和 selenium,我想了解以下两组代码之间的区别,它们都执行得很好并且具有相同的行为。

WebDriver 是一个接口,它由 FirefoxDriver 类实现,该类实现了它的所有方法。因此,为了调用 FirefoxDriver 中存在的方法,我们正在使用它的构造函数创建一个 firefox 对象,但是为什么人们经常使用第一个(在下面的集合中)以及当我们使用类的构造函数来创建对象而不是那个时这意味着什么类名我们把接口名(类已经实现)。

// First One

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;


public class FirstOne
{
public static void main(String[] args)
{
           WebDriver driver = new FirefoxDriver();  
       driver.get("http://google.com");
           System.out.println(driver.getTitle());
           driver.close();
}
} 

// 第二个

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;


public class FirstOne
{
public static void main(String[] args)
{

       FirefoxDriver driver = new FirefoxDriver();
           driver.get("http://google.com");
           System.out.println(driver.getTitle());
           driver.close();
}
} 

【问题讨论】:

    标签: java selenium


    【解决方案1】:

    由于FirefoxDriver 实现了WebDriver 接口,您可以使用WebDriver 类型的引用来指向FirefoxDriver 的实例。这基本上是为了遵循 OOP 原则 -

    Program to an interface, not to a concrete implementation.

    使用第一种方法为您提供了很大的灵活性,这是程序员遵循的最佳实践。通过interfaces 引用对象使您可以稍后更改实现,而不会影响您现有的大部分代码。这种方法对于依赖注入之类的东西特别有用。

    欲了解更多信息,请查看this answer。您也可以查看Effective Java,第 52 项 -

    通过接口引用对象。

    【讨论】:

      【解决方案2】:

      Sayem 是对的,但让我稍微解释一下为什么这样做。

      这允许我们称之为解耦。本质上,使用 WebDriver 的代码只关心它是一个 Web 驱动程序,而不是 Web 驱动程序的实现。本质上,调用代码应该只关心 WebDriver 做什么,而不是如何。

      这种解耦或“关注点分离”的概念是 OO 的一个基本方面。 Google 可以找到大量关于该主题的文章,它确实值得一读,因为它是优秀 Java 和优秀 OO 编程的基础。

      【讨论】:

        【解决方案3】:

        作为一个应用面向对象设计原则的实际示例,如果您对接口进行编程,则可以换出具体的实现。

        如果你有:

        FirefoxDriver driver = new FirefoxDriver();
        

        如果有人要求您在 Chrome 或 Internet Explorer 上运行此测试会怎样?如果您对界面进行编程,您可以简单地执行以下操作:

        WebDriver driver = new FirefoxDriver();
        

        WebDriver driver = new ChromeDriver();
        

        WebDriver driver = new InternetExplorerDriver();
        

        这样,您就不会被卡住或受限于始终实现 FirefoxDriver,您可以根据需要将其与接口的其他具体实现交换。

        【讨论】:

          猜你喜欢
          • 2014-03-21
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          • 2019-09-11
          • 1970-01-01
          相关资源
          最近更新 更多