顺便声明一下,我准备提供《我当老师的180天(Beta版)》的pdf文件下载,方便大家收藏,阅读。并且谢谢诸位对我有声或无声的支持及批评及意见。

解决方案 »

  1.   

    我觉得应该提供完整的pdf下载
    因为你看这里发一章内容是有限的
    最主要的每次100分,这个。。:)
      

  2.   

    题外话:楼主分真多。我总共才400多分啊。正题:第一个例子很恰当。第3个例子也很好。看3个例子,都是有个具体的原类,接着出现一个类似的类,然后直接继承。3个例子都是用的直接继承,是不是有些例子可以换个方法来做?因为本身子类直接继承超类,如果超类是不变的具体类,那没问题,要不就违反了设计原理里的OCP(开闭原则)(《JAVA与模式》里有提到)。比如第2个例子,因为连狙和大狙都是狙,当已经定义了大狙,又想定义连狙时,可以把共同的代码往上移,成为一个狙的类,再让连狙和大狙都继承它。但是在射击这个动作可以不同,大狙按一下,就一发子弹。连狙不仅按一下,有一发子弹,按住的话就是联发。
      

  3.   

    apollo333() 兄说得很是有道理第2个例子的解决方法显然是 应该把共同的代码往上移,成为一个狙的类(此类应是抽象的)第1个例子可考虑声明一个Player接口(play,stop等),让UMP3继承U盘后再实现Player接口。
    如果考虑到UMP3和U盘存取文件不同(U盘明显快些),应考虑代码往上移,成为一个抽象的移动存储的类,再分别继承第3个例子也有类似问题,因为新的手机并不是老的手机的一种,要么应该和例2一样解决,要么可以考虑装饰模式(不过这样可能在结构上意义不明显)
      

  4.   

    摘自http://dev.csdn.net/Develop/article/26/26772.shtm装饰模式:=DECORATOR=
    记得西边操场没修好时,我们踢球没有地盘,还好,有个篮球场是空的,我们便捡来几块砖头,摆上两个门,哈哈,这样,篮球场也就变成小足球场了。
    系里举办一个舞会,得找块大点的地盘,我们又看中了篮球场,挂起一盏灯,搬来两个音箱,ok,一切搞定。这样,篮球场便变成了舞会厅了,哈哈。装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。其实,篮球场还可以变成很多其它的东东,只要发挥你的想像,嘻嘻。
      

  5.   

    呵呵,楼上的几位兄台说的很对。用继承实现代码重用很容易导致违反ocp规则。但是本书的定位是入门,直接上来就ocp学生会哭的,而且ocp原则也不是不能违反的,至少在初学的时候不用在意这个。还是谢谢几位兄台,如果有时间,可以一起来讨论OOA/OOD。
      

  6.   

    回复:
    比如第2个例子,因为连狙和大狙都是狙,当已经定义了大狙,又想定义连狙时,可以把共同的代码往上移,成为一个狙的类,再让连狙和大狙都继承它。但是在射击这个动作可以不同,大狙按一下,就一发子弹。连狙不仅按一下,有一发子弹,按住的话就是联发。
    ---------------------------------------------
    1,代码上移的主意很好,如果这样狙可以作为一个接口。这样实现的继承我们可以叫接口继承,然后再弄一套类来实现开镜,射击等的具体操作,就符合CRP(构成重用原则)了。但是本例的前提就是存在B46这个类,并且不能修改,所以没有这样做2,连狙的性能其实我不了解,我cs很菜
      

  7.   

    在哪里下载该书啊。/?我正在学java。想看看