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

