在 JDK1.0 时我们用的集合还是 Vector(后来推荐使用 ArrayList),我们用的迭代器还是 Enumeration(后来推荐使用 Iterator)。现在我们想写一个适配器,让 Vector 也能使用 Iterator 迭代器,即在 Enumeration 和 Iterator 之间做适配。
/**
* 1、Iterator 是目标(Target)接口角色。
* 2、Enumeration 是被适配者(Apaptee)角色。
* 3、EnumerationAdapter 是适配者(Adapter)角色。
*/
public class EnumerationAdapter implements Iterator {
private Enumeration enumeration;
public EnumerationAdapter(Enumeration enumeration) {
this.enumeration = enumeration;
}
@Override
public boolean hasNext() {
return enumeration.hasMoreElements();
}
@Override
public Object next() {
return enumeration.nextElement();
}
@Override
public void remove() {
throw new UnsupportedOperationException("remove");
}
}
public static void main(String[] args) {
Vector vector = new Vector();
vector.add("java");
vector.add("python");
vector.add("javaScript");
Enumeration enumeration = vector.elements();
Iterator iterator = new EnumerationAdapter(enumeration);
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
@Data
public class Subject {
private String name;
}
@Data
public class Teacher {
private Subject subject;
}
public static void main(String[] args) {
Teacher teacher = new Teacher();
String name = teacher.getSubject().getName();
System.out.println(name);
}
如上,我们常常这样写代码 —— teacher.getSubject().getName(),但是“最少知识”原则指导我们,应该减少对象间的间接交互:
@Data
public class Teacher {
private Subject subject;
public String getSubjectName() {
return getSubject().getName();
}
}
public static void main(String[] args) {
Teacher teacher = new Teacher();
String name = teacher.getSubjectName();
System.out.println(name);
}
额,感觉略鸡肋的用法,但是“最少知识”原则可以减少我们所依赖的类的数目。还是那句话吧,原则只是指导,具体情况具体分析。