请教一下
public class buildhouse(){ //根据不同的参数类型
...
public gethouse(args){
switch(args.type){
case "red":new redhouse(args).getHouse(); break;
case "blue":new bluehouse(args).getHouse();break;
}
}
...
}
public interface house(){
void setcolor(args);
void setwin(args);
void setdoor(args);
String getHouse();
}
public class redhouse implements house{
void setcolor(args){color = args.color;}
void setwin(args){ winnumber = args.winnum; }
void setdoor(args) { door = 1;
door.setColor("black");
door.setclock(1);
}
String getHouse(args){
this.setcolor(args);
this.setwin(args);
this.setdoor(args);
};
}
public class bluehouse implements house{
void setcolor(args){color = args.color;}
void setwin(args){ winnumber = args.winnum; }
void setdoor(args) { door = 2;
door.setColor("yellow");
door.setclock(1);
}
String getHouse(args){
this.setcolor(args);
this.setwin(args);
this.setdoor(args);
};
}
如果需要增加新类型的房子,需要做的事情:
1,增加一个新的类
2,修buildhouse()的调用
如果buildhouse()需要增加新的方法,需要做的事情:
1,在buildhouse()中增加方法
2,修改所有的子类
问题:
class redhouse与class bluehouse中的方法,setcolor,setwin内容都是一样的,这样算代码重复吗?
第二种方式
public class buildhouse(){
...
public gethouse(args){
color = args.color;
winnumber = args.winnum;
if(args.type=="red") {
door = 1;
door.setColor("black");
}
if(args.type=="blue"){
door = 2;
door.setColor("yellow");
}
door.setclock(1);
}
...
}
如果需要增加新类型的房子,需要做的事情:
需要修改gethouse的方法gethouse
问题:
每次需要修改代码的时候,都要修改gethouse.如果某些参数类型是不同的处理,又需要重新修改buildhouse.
如:
public class buildhouse(){
...
public gethouse(args){
color = args.color;
winnumber = args.winnum;
if(args.type=="red") {
door = 1;
door.setColor("black");
}
if(args.type=="blue"){
door = 2;
door.setColor("yellow");
}
if(args.type=="green"){ //新增加的类型的处理与原来的不同
door.setclock(3);
}else{
door.setclock(1);
}
}
...
}
两种方式相比,哪种比较好?原理是什么
|