那么,问题开始了^_^:先介绍汽车的部件---------------汽车的发动机Engine描述如下:
- 颜色
- 重量
- 有两种状态on,off,
- 可以点燃turnon,熄灭turnoff,点燃时状态为on,熄灭时状态为off车轮Wheel描述如下:
- 颜色
- 半径(m)
- 有两种状态,转动turn,静止stop--------------------------------
现在有汽车Car的描述:
- 颜色
- 有1个发动机
- 有4个车轮
- 有两种状态,行驶状态move和停止状态stop;
- 汽车可以开动poweron,开动时,发动机点燃使发动机状态为on,发动机点燃使4个轮子转动,4个轮子转动使汽车行驶move
- 汽车可以停止poweroff,停止时发动机熄火为off,发动机off则时轮子停转stop,轮子停转使汽车停下来stop.难点:
1.汽车中部件数量的描述
2.通过对汽车的操作,使其内部部件状态改变,最终改变汽车的状态.这样一个类,怎样设计使其实现呢? ^_^~
- 颜色
- 重量
- 有两种状态on,off,
- 可以点燃turnon,熄灭turnoff,点燃时状态为on,熄灭时状态为off车轮Wheel描述如下:
- 颜色
- 半径(m)
- 有两种状态,转动turn,静止stop--------------------------------
现在有汽车Car的描述:
- 颜色
- 有1个发动机
- 有4个车轮
- 有两种状态,行驶状态move和停止状态stop;
- 汽车可以开动poweron,开动时,发动机点燃使发动机状态为on,发动机点燃使4个轮子转动,4个轮子转动使汽车行驶move
- 汽车可以停止poweroff,停止时发动机熄火为off,发动机off则时轮子停转stop,轮子停转使汽车停下来stop.难点:
1.汽车中部件数量的描述
2.通过对汽车的操作,使其内部部件状态改变,最终改变汽车的状态.这样一个类,怎样设计使其实现呢? ^_^~
解决方案 »
- 谁有《算法设计技巧与分析》沙特 这本书的习题答案
- 关于jTextField的值
- int[] a2 = new int[10]; Arrays.fill(a1, 47); 数组a2的所有元素都引用一个对象 "47"; 还是有10个"47"对象一一对应a2中的每个元素
- 有关Tomcat请帮我!
- 我的数据库有一个numeric类型,resultset的get×××用什么读取它?
- 各位 来者有分。
- 最简单的程序(打印hello,word的程序)不能运行,请指教!!!
- 请问那里有MS SQLServer的JDBC驱动呢?
- JDBC里,该如何判断一张表是否存在
- 日历问题!
- 请问:file搜索怎样支持dos提示符*,有没有现成的方法可以?谢谢
- 問一個簡單的問題?標題不知道怎麼起!
public class Car {
private String color;
private Engine engine;
private Wheel[] wheels;
private boolean moving; public Car() {
engine = new Engine();
wheels = new Wheel[4];
for(int i = 0; i < wheels.length; i++)
wheels[i] = new Wheel();
} public void powerOn() {
engine.turnOn();
for(int i = 0; i < wheels.length; i++)
wheels[i].turn();
moving = true;
} public void powerOff() {
engine.turnOff();
for(int i = 0; i < wheels.length; i++)
wheels[i].stop();
moving = false;
}
}class Engine {
private String color;
private float weight;
private boolean on; public void turnOn() {
on = true;
} public void turnOff() {
on = false;
}
}class Wheel {
private String color;
private float radius;
private boolean working; public void turn() {
working = true;
} public void stop() {
working = false;
}
}
小弟正在写一篇关于这个问题的论文,文章中提及了一个解决方案——建造与反射
所谓建造就是建造模式、反射就是JAVA中的反射机制。楼主说的难点其实并不是难点所在,要解决楼主所说得难点其实很简单,只需要用一个单纯的门面模式使部件的装配对用户不透明,就像《java与模式中》中门面模式举的例子一样。小弟认为真正的难点在于对部件类的管理问题上,试想这样一个问题,这个装配车间可选用的零件很多(光是发动机就有20种款式,并且还在不停的增加)。我们要对这么多的发动机、轮胎进行编码、管理。显然这个问题值得我们思考。小弟的解决方案是,将各种型号的发动机参数写入一个xml配置文件,然后动态生成这些类。在做一个发动机接口(interface Engine),这时我们就可以用反射的方式返回给用户这个发动机的接口。这是最底层,显然零件生成了,我们还需要将这些零件组装成一个完整的汽车,工厂模式为我们提供了解决方案,汽车这个类中,我们将发动机接口、轮胎接口聚合起来,并提供相应的方法操作他们(如stop()、move(),returning()),一辆汽车就制造出来了。
如果说是解决整体服务不受影响的时候切换部件那就另当别论了。我觉得,这个问题aggregation就可以很好的解决了,部件虽然可以不一样,但是对一台汽车来说,轮胎的半径之类应该是不能改变的吧?呵呵。如果这样一直考虑下去的话就很深了,例如发动机的排气量是可变的,轮胎的颜色是可变的,但是有一部分属性是由汽车规定的,满足这个规定的部件才能组装到这辆汽车上......这样的话,汽车必须定义一组借口规范,不光要定义出行为的规范如转动turn()和停止stop(),而且还要定义出属性的规格如轮胎半径r等等......这个问题中应该不涉及这么复杂的问题。我认为Dan1980(不用IDE的大傻瓜)大哥的代码有一处地方值得商酌,就是轮胎状态改变的时候应该至少有两个是同步的吧?一个一个先后转应该不行吧?呵呵!