那么,问题开始了^_^:先介绍汽车的部件---------------汽车的发动机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.通过对汽车的操作,使其内部部件状态改变,最终改变汽车的状态.这样一个类,怎样设计使其实现呢? ^_^~

解决方案 »

  1.   

    呵呵,典型的THINK IN JAVA SECOND EDITION里面的例子,自己看看吧。
      

  2.   

    随便写了一个,不知符不符合要求:
    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;
        }
    }
      

  3.   

    楼上的不太科学。
    小弟正在写一篇关于这个问题的论文,文章中提及了一个解决方案——建造与反射
    所谓建造就是建造模式、反射就是JAVA中的反射机制。楼主说的难点其实并不是难点所在,要解决楼主所说得难点其实很简单,只需要用一个单纯的门面模式使部件的装配对用户不透明,就像《java与模式中》中门面模式举的例子一样。小弟认为真正的难点在于对部件类的管理问题上,试想这样一个问题,这个装配车间可选用的零件很多(光是发动机就有20种款式,并且还在不停的增加)。我们要对这么多的发动机、轮胎进行编码、管理。显然这个问题值得我们思考。小弟的解决方案是,将各种型号的发动机参数写入一个xml配置文件,然后动态生成这些类。在做一个发动机接口(interface Engine),这时我们就可以用反射的方式返回给用户这个发动机的接口。这是最底层,显然零件生成了,我们还需要将这些零件组装成一个完整的汽车,工厂模式为我们提供了解决方案,汽车这个类中,我们将发动机接口、轮胎接口聚合起来,并提供相应的方法操作他们(如stop()、move(),returning()),一辆汽车就制造出来了。
      

  4.   

    yinwenjie(java入门中)兄弟是不是把简单问题复杂化了?汽车部件管理应该是不需要那么复杂的实现,因为汽车行驶状态时不能够动态更换部件的吧?
    如果说是解决整体服务不受影响的时候切换部件那就另当别论了。我觉得,这个问题aggregation就可以很好的解决了,部件虽然可以不一样,但是对一台汽车来说,轮胎的半径之类应该是不能改变的吧?呵呵。如果这样一直考虑下去的话就很深了,例如发动机的排气量是可变的,轮胎的颜色是可变的,但是有一部分属性是由汽车规定的,满足这个规定的部件才能组装到这辆汽车上......这样的话,汽车必须定义一组借口规范,不光要定义出行为的规范如转动turn()和停止stop(),而且还要定义出属性的规格如轮胎半径r等等......这个问题中应该不涉及这么复杂的问题。我认为Dan1980(不用IDE的大傻瓜)大哥的代码有一处地方值得商酌,就是轮胎状态改变的时候应该至少有两个是同步的吧?一个一个先后转应该不行吧?呵呵!