代码设计的可扩展性
在之前的castlexx.Java项目工程文件中提到过代码设计的规范性。
在castlexx.Java文件中类Gamex和类Roomx的代码仍有需要改进的地方。
面向对象设计语言基本原则:
- 消除代码复制(代码复制时不良设计的一种表现);
- 增加可扩展性:可运行的代码可不等于(!= )良好的代码,对代码维护的时候就能看出代码的质量;
- 类和类之间的关系称作耦合,用封装来降低耦合:Roomx和Gamex都有大量的代码和出口相关;尤其时Gamex类中大量使用了Room类的成员变量,耦合越低越好,保持距离时形成良好代码的关键;
总的来说,要减少一些硬编码的地方,多增加一些方法以及灵活多的使用类库。
用接口实现聚合
在类Roomx中添加一些新的方法,比如“容器”,来替换一些成员变量,实现代码的灵活性,减少一些复杂,硬编码的地方。
这里使用HashMap容器,可以让整的程序变得灵活起来,不再是国语的繁杂。
package castlexx;
import java.util.HashMap;
public class Roomx {
//定义房间出口的属性,定义一个描述函数和四个成员变量
private String descrption; //描述方向
//用容器来实现灵活性:Roomx的方向使用成员变量表示的
private HashMap<String, Roomx>exits = new HashMap<String,Roomx>(); // key value
// private Roomx northExit;
// private Roomx southExit;
// private Roomx eastExit;
// private Roomx westExit;
//构造
public Roomx(String description)
{
this.descrption = description; //本地初始化
}
//设置接口(也就是替换了之前的出口设置)
public void setExit(String dir,Roomx roomx)
{
exits.put(dir, roomx);
}
//设置出口
// public void setExits(Roomx north, Roomx east,Roomx south,Roomx west )
// {
// if(north != null)
// northExit = north;
// if(east != null)
// eastExit = east;
// if(south != null)
// southExit = south;
// if(west != null)
// westExit = west;
//
//
// }
//覆盖函数
@Override
public String toString() {
return descrption;
}
//获得房间出口信息
public String getExitDesc()
{
StringBuffer sb = new StringBuffer(); //StringBuffer构造一个字符串缓冲区,其中没有字符,初始容量为16个字符。
for(String dir : exits.keySet() )
{
sb.append(dir);
sb.append(" ");
}
return sb.toString();
// if(northExit != null)
// sb.append(" north ");
// if(eastExit != null)
// sb.append("east ");
// if(southExit != null)
// sb.append("south ");