我有一个小java程序,它收集用户写的10个单词,并按指定的顺序打印它们。就目前而言,这个程序是有效的,但它并不具有凝聚力。
我的问题源于对内聚的概念不够了解,无法解决这个问题,同时我也是Java/OO语言的新手。
我认为Entry类太混乱了,应该由另一个类来承担这个类的一些功能。
任何提示或线索,神秘或其他将非常感激!
dialog .java中缺少输入读取器是有意为之,因为原始代码使用专有代码。
这是三个类:输入、对话和打印机。
Entry.java
public class Entry {
public static void main(String[] args){
String[] wordArray = new String[10];
Dialogue d = new Dialogue();
wordArray = d.read(wordArray);
Printer p = new Printer();
p.printForwards(wordArray);
p.printBackwards(wordArray);
p.printEveryOther(wordArray);
}
}
Dialogue.java
public class Dialogue {
public String[] read(String[] s){
String[] temp;
temp = new String[s.length];
for(int i=0;i<s.length;i++){
String str = anything that reads input("Enter word number" + " " + (i+1));
temp[i] = str;
}
return temp;
}
}
Printer.java
public class Printer {
public void printForwards(String[] s){
System.out.println("Forwards:");
for(int i=0;i<s.length;i++){
System.out.print(s[i] + " ");
if(i==s.length-1){
System.out.println("");
}
}
}
public void printBackwards(String[] s){
System.out.println("Backwards:");
for(int i=s.length-1;i>=0;i--){
System.out.print(s[i]+ " ");
if(i==0){
System.out.println("");
}
}
}
public void printEveryOther(String[] s){
System.out.println("Every other:");
for(int i = 0; i < s.length; i++){
if(i % 2 == 0){
System.out.print(s[i] + " ");
}
}
}
}// /class
总体上看起来不错,事实上这是一个非常简单的任务,而OOP更适合于更复杂的程序。话虽如此,这里有一些提示/例子。
你也可以做你的打印更OOP风格。这样做的目的是构建可重用的模块化代码。我们通过将String数组操作(之前存在于Printer类中)抽象到它自己的类来实现这一点。
这也非常类似/也称为松耦合。我们通过拆分字符串处理功能和打印功能来实现松耦合。
把你的Printer类改成StringOrderer或者类似的东西:
public class StringOrderer {
private String[] array;
public class StringOrderer(String[] array) {
this.array = array;
}
public String[] getArray() {
return array;
}
public String[] everyOther(){
String[] eos = new String[array.length];
for(int i = 0; i < s.length; i++){
if(i % 2 == 0){
eos[eos.length] = s[i];
}
return eos;
}
public String[] backwards() {
...
然后在主类中添加如下方法:
private static void printStringArray(String[] array) {
for (int i=0; i<array.length; i++) {
System.out.print(array[i]);
}
}
然后在主方法中调用它:
StringOrderer s = new StringOrderer(wordArray);
System.out.println('Forward:');
printStringArray(s.getArray());
System.out.println('Every other:');
printStringArray(s.everyOther());
System.out.println('Backwards:');
...
额外提示-你也可以在你的主类中添加方法,像这样:
public class Entry {
public static void main(String[] args){
String[] wordArray = readWordArray()
Printer p = new Printer();
p.printForwards(wordArray);
p.printBackwards(wordArray);
p.printEveryOther(wordArray);
}
private static String[] readWordArray() {
Dialogue d = new Dialogue();
return d.read(new String[10]);
}
}