jav 编程思想9.3节“完全耦合”写得太恶心了,大神进来看下.

dsfsdfdsfsdfsdfds 2013-10-18 05:57:57
JAVA编程思想(第4版)里“完全耦合”一节,请看下面代码里的Apply类:
import java.util.*;

class Processor{
String name(){
return getClass().getSimpleName();
}

Object process(Object input){
return input;
}
}

class Upcase extends Processor{
String process(Object input){
return ((String)input).toUpperCase();
}
}

class Downcase extends Processor{
String process(Object input){
return ((String)input).toLowerCase();
}
}

class Splitter extends Processor{
String process(Object input){
return Arrays.toString(((String)input).split(" "));
}
}

class Apply{
static void process(Processor p, Object s){
System.out.println("Using Processor " + p.name());
System.out.println(p.process(s));
}

}

public class DecouplingClass{
static String str = "aunt Iirma visit";
public static void main(String [] args){
Apply.process(new Upcase(), str);
}
}

下面定义了一组类:
class Waveform { 
private static long counter;
private final long id = counter++;
public String toString() { return "Waveform " + id; }
}

public class Filter {
public String name() {
return getClass().getSimpleName();
}
public Waveform process(Waveform input) { return input; }
}
class LowPass extends Filter {
double cutoff;
public LowPass(double cutoff) { this.cutoff = cutoff; }
public Waveform process(Waveform input) {
return input; // Dummy processing
}
}

class HighPass extends Filter {
double cutoff;
public HighPass(double cutoff) { this.cutoff = cutoff; }
public Waveform process(Waveform input) { return input; }
}

class BandPass extends Filter {
double lowCutoff, highCutoff;
public BandPass(double lowCut, double highCut) {
lowCutoff = lowCut;
highCutoff = highCut;
}
public Waveform process(Waveform input) { return input; }
}


书上说这组类看似可以调用Apply.process()的方法,实际上是不可以的,事实也是不可以的。因为它们并非继承自Processor。
下面作者紧接着又说:如果Processor是一个接口,那么这些限制就会变得松动,言下之意是说,如果Processor是个interface,那么便可以将Apply.process()方法应用与刚才定义的那组含Filter的类。
于是作者紧接着修改了之前的含Processor的代码:
interface Processor { 
String name();
Object process(Object input);
}

class Apply {
public static void process(Processor p, Object s) {
print("Using Processor " + p.name());
print(p.process(s));
}
}
abstract class StringProcessor implements Processor{
public String name() {
return getClass().getSimpleName();
}
public abstract String process(Object input);
public static String s =
"If she weighs the same as a duck, she’s made of wood";
public static void main(String[] args) {
Apply.process(new Upcase(), s);
Apply.process(new Downcase(), s);
Apply.process(new Splitter(), s);
}
}
class Upcase extends StringProcessor {
public String process(Object input) { // Covariant return
return ((String)input).toUpperCase();
}
}
class Downcase extends StringProcessor {
public String process(Object input) {
return ((String)input).toLowerCase();
}
}
class Splitter extends StringProcessor {
public String process(Object input) {
return Arrays.toString(((String)input).split(" "));
}
}


言下之意是,这样修改的话,之前那组含Filter的class便可以应用与Apply.process(), 但是我看了近乎一天,怎么也没看懂这特么修改后怎么就可以将Filter应用于Apply.process()了。是我智商低吗?
求大神指点.
...全文
585 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
咖啡不放糖 2013-10-20
  • 打赏
  • 举报
回复
表示书买了没时间看
teemai 2013-10-20
  • 打赏
  • 举报
回复
入门就别看那本书了。等工作个几年再看吧。
d00522 2013-10-20
  • 打赏
  • 举报
回复
这么简单的东西 有什么不懂啊
dsfsdfdsfsdfsdfds 2013-10-20
  • 打赏
  • 举报
回复
引用 6 楼 huxiweng 的回复:
入门就别看那本书了。等工作个几年再看吧。
谢谢! 不过作为一个有编程基础的来说,直接看这本也无可厚非,嘻嘻(*^__^*) 嘻嘻……
无聊找乐 2013-10-18
  • 打赏
  • 举报
回复
没看过第四版,
失落夏天 2013-10-18
  • 打赏
  • 举报
回复
你很不错了,这本书我就没看过,虽然知道很经典,但是懒
dsfsdfdsfsdfsdfds 2013-10-18
  • 打赏
  • 举报
回复
引用 1 楼 Lsheep 的回复:
你没看完全啊,我刚把这一节看了,后面说的很清楚呀,你再看看。
我搞懂了,奶奶的,不就一整段代码嘛,中间插那么多废话,哎。。。
Lsheep 2013-10-18
  • 打赏
  • 举报
回复
你没看完全啊,我刚把这一节看了,后面说的很清楚呀,你再看看。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧