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;
	}
 
}