Java设计原则3—城堡游戏之可扩展性
来源:互联网 发布:淘宝借贷怎么借钱 编辑:程序博客网 时间:2024/04/30 13:32
什么叫可扩展性?
可扩展性的意思就是代码的某些部分不需要经过修改就能适应将来可能的变化。
比如:现在要给城堡游戏中添加up和down两个方向,该怎么做呢?
这就要基于设计的城堡游戏中,在Java设计原则2—城堡游戏之封装中,把Room内部成员变量设为私有,然后提供了两个接口(实现了内部私有成员的操作)以便外部访问;然后需要考虑在Room类内部应该如何表达出口,如何出口和从出口出去之后所对应的房间之间的关系,这个在Room内部,Room自己说了算,所以可以用容器来实现灵活性,即:用容器来表达,方向和这个方向所对应的房子的关系。
用容器实现灵活性:目前城堡游戏中的问题:Room的方向是用成员变量表示的,增加或减少方向就要改变代码。策略:如果用Hash表示方向,那么方向就不是“硬编码”的了。
看下面的代码:
public class Room { private String description; private HashMap<String, Room> exits = new HashMap<String, Room>(); //用HashMap表示方向 public Room(String description) { this.description = description; } public void setExits(String dir, Room room) { exits.put(dir, room);//调用put方法填写元素 } @Override public String toString() { return description; } public String getExitDesc() { StringBuffer sb = new StringBuffer(); for(String dir : exits.keySet()) { sb.append(dir); sb.append(' '); } return sb.toString(); } public Room goExit(String direction) { return exits.get(direction); }}
public class Game { private Room currentRoom; public Game() { createRooms(); } private void createRooms() { Room outside, lobby, pub, study, bedroom; // 制造房间 outside = new Room("城堡外"); lobby = new Room("大堂"); pub = new Room("小酒吧"); study = new Room("书房"); bedroom = new Room("卧室"); // 初始化房间的出口(ps:可以方便的加入或删除任何方向) outside.setExits("east", lobby); outside.setExits("south", study); outside.setExits("west", pub); lobby.setExits("west", outside); pub.setExits("east", outside); study.setExits("north", outside); study.setExits("east", bedroom); bedroom.setExits("west", study); lobby.setExits("up", pub); pub.setExits("down", lobby); currentRoom = outside; // 从城堡门外开始 } private void printWelcome() { System.out.println(); System.out.println("欢迎来到城堡!"); System.out.println("这是一个超级无聊的游戏。"); System.out.println("如果需要帮助,请输入 'help' 。"); System.out.println(); showPrompt(); } // 以下为用户命令 private void printHelp() { System.out.print("迷路了吗?你可以做的命令有:go bye help"); System.out.println("如:\tgo east"); } private void goRoom(String direction) { Room nextRoom = currentRoom.goExit(direction); if (nextRoom == null) { System.out.println("那里没有门!"); } else { currentRoom = nextRoom; showPrompt(); } } public void showPrompt() { System.out.println("你在" + currentRoom); System.out.print("出口有: "); System.out.println(currentRoom.getExitDesc()); System.out.println(); } public static void main(String[] args) { Scanner in = new Scanner(System.in); Game game = new Game(); game.printWelcome(); while ( true ) { String line = in.nextLine(); String[] words = line.split(" "); if ( words[0].equals("help") ) { game.printHelp(); } else if (words[0].equals("go") ) { game.goRoom(words[1]); } else if ( words[0].equals("bye") ) { break; } } System.out.println("感谢您的光临。再见!"); in.close(); }}
0 0
- Java设计原则3—城堡游戏之可扩展性
- Java设计原则2—城堡游戏之封装
- Java设计原则1—城堡游戏之消除代码复制
- 可扩展性设计之数据切分
- 可扩展性设计之数据切分
- 可扩展性设计之数据切分
- 可扩展性设计之数据切分
- Java 可扩展性与设计模式
- Java之面向接口编程 可扩展性
- 可扩展性设计(-)
- java的可扩展性
- 设计模式——面向接口编程之柔性多态增强代码的可扩展性
- 可扩展性设计模式(zz)
- 可扩展性设计模式(zz)
- SSIS可靠性和扩展性—可扩展性
- 面向对象设计原则之三(里氏替换原则)-构建扩展性更好的系统
- 面向对象设计6大原则之六(迪米特原则)-更好的扩展性
- JAVA学习之路-简单的城堡游戏(一)
- 一次python多线程使用经历
- Android学习视频
- 重新下载所有未下载成功的maven包(含大量未下载的方法)
- 关于何时执行shiro AuthorizingRealm 里的 doGetAuthenticationInfo与doGetAuthorizationInfo
- MongoDB 高可用分片配置(Windows、Linux)
- Java设计原则3—城堡游戏之可扩展性
- Android工具类——ManifestUtils判断app是处于前台还是后台
- 存储分页
- Spark1.6.2 源码编译
- 关于PICT的安装和使用
- 链接博客
- 几个经典问题:1)项目利益分配;2)如何提涨薪:3)老油条 的处理;4)我提离职后老板态度好了……
- 字符串取 后 n 位
- eclipse中各图标的含义