题目:
有一个防火门,目前需要防火的功能,以后可能会需要扩展防盗的功能或者其他的功能。请利用你学过的面向对象设计的知识,设计一个方案让这个防火门以后更加利于扩展。考虑到题目叙述可能不清楚,我来说一个最弱智的思路。定义一个门的抽象父类,里面有防火、防盗、防……的方法。然后定义一个防火门的类继承,去真正实现这个防火的方法。当然上面这个肯定不利于扩展了,因为一次不可能把以后可能扩展的所有功能都写到父类里面去。所以防火门的这个类以后要扩展就很麻烦。现在请设计高手来设计这个程序,用父类、用接口、甚至用设计模式都好。写出你设计的代码,并且详细说明为什么你觉得这么设计是有利于以后扩展的(若是设计模式,请说明是哪一种设计模式,如:工厂)。谢谢。
最佳答案将得到100分。谢谢各位的付出。

解决方案 »

  1.   

    定义一个接口,里面定义防火,防盗,防师兄里面都可能会用到的方法,比如fight(),完后防火实现防火的fight(),防盗实现防盗的fight(),防师兄实现防师兄的fight(),你再要扩展什么也一样,只要你是防什么,必然要实现fight(),开闭原则
      

  2.   

    用接口啊,
    接口 public object 放XXX();
    类:防火implenment接口  实现public object 防火();
    如果要防盗,你也可以实现接口啊public object 防盗();在其他类中只用接口声明变量,用的时候把类set进去(ioc)
      

  3.   

    呵呵,模版方法+策略模式
    防火防盗等等同归于一个接口    public interface IGuarder
            public void guard();
        }
    //定义一个模版
    public Abstract class guarder{
        private void beforeGuardDo()//所有防xx的方法预备做的共同的步骤
         private void afterGuardDo()//所有防xx的方法之后做的共同的步骤
    }//策略模式
    public class guardFire extends guarder
    public class guardStealth extends guarder//观察者模式
    public class Gate
    {
       private guarder[] guarders;
    }
    //被观察者就是Guarder 
    当新增一个被观察者的时候把被观察者写入到配置文件中
    每次门一加载就读取配置文件当然,策略模式也可以改成装饰者模式,对门的具体功能进行装饰
    这样也比较灵活,然后用工厂模式把最外层的装饰类放入到Gate类中就可以了
      

  4.   

    呵呵,忘记了,抽象类guarder要实现接口IGuarder
      

  5.   

    按楼主的要求,如果考虑到以后扩展方便的话,最好的方法应该是设计一个一对多的关联。门是一个类,功能是一个类,一个门对应多个功能,如防盗防火之类,在门这个类里用ArrayList。这样就可以无限增加功能而不用修改类了。在执行一个”门“的功能时,可以遍历这个ArrayList<功能>,而”防盗功能“,”防火功能“执行”功能“接口来实现具体操作。
      

  6.   

    class 门
    interface 放火able
    interface 防盗ableclass 防火门 extends 门 implement 放火able
    class 防盗门 extends 门 implement 防盗able
    class 放火防盗门 extends 门  implement 放火able,防盗able
      

  7.   

    更明确一点:interface 开able
    interface 关able
    interface 通过able
    interface 放火able
    interface 防盗able
    class 门 implement 开able,关able,通过able
    class 防火门 extends 门 implement 放火able
    class 防盗门 extends 门 implement 防盗able
    class 放火防盗门 extends 门  implement 放火able,防盗able
      

  8.   

    再扩展:interface 开able
    interface 关able
    interface 通过able
    interface 放火able
    interface 防盗able//虚父类,不实现接口的任何方法,限定其子类必须含有的功能
    abstract class 门 implement 开able,关able,通过able
    abstract class 防火门 extends 门 implement 放火able
    abstract class 防盗门 extends 门 implement 防盗able
    abstract class 放火防盗门 extends 门  implement 放火able,防盗able//实现类
    class 盼盼门 extends 门
    class 盼盼防火门 extends 防火门
    class 盼盼防盗门 extends 防盗门
    class 盼盼放火防盗门 extends 放火防盗门 class 熊猫门 extends 门
    class 熊猫防火门 extends 防火门
    class 熊猫防盗门 extends 防盗门
    class 熊猫放火防盗门 extends 放火防盗门
      

  9.   

    从新思考了下,觉得应该是:interface 开able
    interface 关able
    interface 通过able
    interface 放火able
    interface 防盗able//虚父类,不实现任何方法,限定子类必须有的功能,也可以让三个功能也可以有不同实现;
    abstract class 门 implement 开able,关able,通过able//实现类
    class 盼盼门 extends 门
    class 盼盼防火门 extends 盼盼门
    class 盼盼防盗门 extends 盼盼门
    class 盼盼放火防盗门 extends 盼盼门class 熊猫门 extends 门
    class 熊猫防火门 extends 熊猫门
    class 熊猫防盗门 extends 熊猫门
    class 熊猫放火防盗门 extends 熊猫门
      

  10.   

    打错了。。CSDN为什么不能编辑帖子。从新思考了下,觉得应该是:interface 开able
    interface 关able
    interface 通过able
    interface 放火able
    interface 防盗able//虚父类,不实现任何方法,限定子类必须有的功能,也可以让三个功能也可以有不同实现;
    abstract class 门 implement 开able,关able,通过able//实现类
    class 盼盼门 extends 门
    class 盼盼防火门 extends 盼盼门 implement 放火able 
    class 盼盼防盗门 extends 盼盼门 implement 防盗able 
    class 盼盼放火防盗门 extends 盼盼门 implement 放火able ,防盗able class 熊猫门 extends 门
    class 熊猫防火门 extends 熊猫门 implement 放火able 
    class 熊猫防盗门 extends 熊猫门 implement 防盗able 
    class 熊猫放火防盗门 extends 熊猫门 implement 放火able ,防盗able 
      

  11.   

    搞笑下:class ActionLisetner()
    {
          public void 失火(Evnet e,门 d)
          {
                if(!d instenceof 防火able)
                {
                      gameover();
                 }
          }
    }
      

  12.   

    策略模式
    定义一个父类:Door,在定义防火门,防盗门的类继承
    定义一个接口:Function,防火,防盗的功能具体来实现
    写一个测试类:里面实现策略模式。