Java中的接口分离原则
时间:2020-02-23 14:34:50 来源:igfitidea点击:
在本教程中,我们将了解接口分离原则。
它是固有原则之一。
在简单的术语中,接口分离原则决定了客户端不应强制实现它将无法使用的方法。
我们可以始终从我们不想使用的方法中丢弃UnsupportedoperationException,但不建议使用它使程序很难使用。
让我们在一个简单的例子的帮助下了解。
假设我们创建了如下简单的设置接口。
public interface Set<E> { boolean add(E e); boolean contains(Object o); E ceiling(E e); E floor(E e); }
创建一个类TreeS.java如下。
package org.igi.theitroad; public class TreeSet implements Set{ @Override public boolean add(Object e) { //Implement this method return false; } @Override public boolean contains(Object o) { //Implement this method return false; } @Override public Object ceiling(Object e) { //Implement this method return null; } @Override public Object floor(Object e) { //Implement this method return null; } }
创建另一个类hashset.java,如下所示。
package org.igi.theitroad; public class HashSet implements Set{ @Override public boolean add(Object e) { return false; } @Override public boolean contains(Object o) { return false; } @Override public Object ceiling(Object e) { //This method is not applicable for HashSet return null; } @Override public Object floor(Object e) { //This method is not applicable for HashSet return null; } }
我们是否看到问题,即使我们不需要在Hashset中的天花板和地板方法,我们必须实现它们。
对上述问题的正确解决方案是:创建一个名为Navigableset的另一个接口,该接口将具有天花板和地板方法。
public interface NavigableSet<E> { E ceiling(E e); E floor(E e); }
并设置接口将如下更改
public interface Set<E> { boolean add(E e); boolean contains(Object o); }
现在TreeSet.java将要实现两个接口集和Navigableset。
更改Stocket.java如下。
package org.igi.theitroad; public class TreeSet implements Set,NaviagableSet{ @Override public boolean add(Object e) { //Implement this method return false; } @Override public boolean contains(Object o) { //Implement this method return false; } @Override public Object ceiling(Object e) { //Implement this method return null; } @Override public Object floor(Object e) { //Implement this method return null; } }
Hashset将仅落实设置,因为它不需要天花板和地板方法。
package org.igi.theitroad; public class HashSet implements Set{ @Override public boolean add(Object e) { return false; } @Override public boolean contains(Object o) { return false; } }