使用静态方法对接口进行Java编程

时间:2020-02-23 14:36:46  来源:igfitidea点击:

在本快速教程中,我们将了解接口上的静态方法如何帮助我们设计更好的代码并支持基本的设计原则:"编程到接口,而不是实现"。
您可以在java 8接口更改时找到静态方法的基本详细信息。
让我们开始编程接口设计原理。

Java编程接口

这一直是最基本的设计原则之一。
我们应该始终使用接口来有效地执行开发合同,同时保持代码的松散耦合。

在Java中,我们已经看到几个Collection类遵循这些原则,其中具体的实现只公开了它们从接口实现的方法,而其余的实现则保留在私有方法中。

编程以实现接口的问题

让我们介绍一下" SuperHeros"界面,该界面为我们提供了字符列表。

public interface SuperHeros {
	public List<String> getCharacters();
}

有许多漫画工作室,每个工作室都有自己的具体实现。

public class DCSuperHeros implements SuperHeros {
	List<String> characters = List.of("Super Man", "Bat Man", "Wonder Woman", "Cyborg", "Flash");

	public List<String> getCharacters() {
		return characters;
	}
}
public class MarvelSuperHeros implements SuperHeros {
	List<String> characters = List.of("Spider Man", "Captain America", "Daredevil", "Wolverine", "Iron Man");

	public List<String> getCharacters() {
		return characters;
	}
}

客户/客户将使用以下代码针对接口编写程序。

SuperHeros marvelHeros = new MarvelSuperHeros();
SuperHeros dcHeros = new DCSuperHeros();

这是因为它固有地将客户端代码与具体实现绑定在一起,然后由于后来已经暴露给客户,因此很难更改具体实现。

尽管我们有接口,但是我们已经向客户提供了具体的实现细节,并且打破了设计原则:对接口进行编程,而不是对实现进行编程。
那么我们如何解决它并使其变得更好呢?

接口上的Java 8静态方法

Java 8引入了许多新功能,其中之一是接口上的静态方法。
开发人员社区通常忽略了这个非常有趣且重要的功能。

为了遵循我们的设计原则,我们将介绍静态方法,这些方法是静态工厂,以创建Superheroes的具体实现的实例。
让我们将静态方法添加到接口中:

public interface SuperHeros {
	public List<String> getCharacters();

	static SuperHeros createDCSuperHeros() {
		return new DCSuperHeros();
	}

	static SuperHeros createMarvelSuperHeros() {
		return new MarvelSuperHeros();
	}
}

另外,使您的具体实现不公开。
现在,客户/客户将使用以下代码:

SuperHeros marvelHeros = SuperHeros.createMarvelSuperHeros();
SuperHeros dcHeros = SuperHeros.createDCSuperHeros();

现在,借助静态方法,我们能够为SuperHeros实现编写静态工厂。

局限性:仅当您对界面有控制权时,才可以应用此方法,如果它是第三方界面,那么它将无法正常工作,并且您最好使用常规方法。