四、面向对象 对象扩展与成长

来源:互联网 发布:编程珠玑 编辑:程序博客网 时间:2024/06/06 18:37

 

 


 前面的继承是类的扩展方式,类在java中是类对象,这里我们最好就把类叫做对象的定义,或者是说描述
这篇文章说的扩展,不是类的扩展,而是对象的扩展。对象是计算环境的搭建者和参与者,对象适应环境变化的能力表现在对象的扩展性和成长性上。

一、让对象依赖于抽象
话说,DOTA中的剑圣1万年前是个书生,不会武功,剑圣的众多绝招都是后来学的。

//人 类
class ren {
      List<wugong>  wugongliebiao ;//武功列表
      List<wenzi>   wenziliebiao;//认识的文字列
      public boolean xuexiWugong(wugong w){   //学习武功
               wugongliebiao.add(w)
      }
     public boolean xuexiWenzi(wenzi w){   //学习文字
               wugongliebiao.add(w)
      }
}
无敌斩

class wudizhan implements wugong{

}

 

剑刃风暴

class jianrenfengbao implements wugong{

}

 

ren  js = new ren();//剑圣出生,什么都不会

js.xuexiWugong(new wudizhan));  //学无敌斩 

js.xuexiWugong(new jianrenfengbao);//学剑刃风暴

 

一个人,在一个环境中总是依靠环境中其他的事物成长,这种有助于成长的扩展性,我们用依赖于抽象进行。好比,只要是武功,剑圣就能学

 

二、多多考虑组合,对象的属性都是抽象

剑圣出生是没有穿衣服的,在他活着的1万年间,他穿过很多的衣服,衣服能增加他的防御力

class ren(){
      ...

      Yifu  yifu;
      setYifu(Yifu f){
              this.yifu = f;
      }
      public Integer getFangyuli(){
            return yifu.fangyuli
      } 
}

Interface  Yifu {
      public Integer getFangyuli();
}

class  longmenkaijia implements Yifu{  //龙门铠甲
         private fangyuli = 10000;
         public Integer getFangyuli(){
            return fangyuli  ;
      }
}
ren  js = new ren();
js.setYifu(new longmenkaijia());

君子擅甲于物也!


三、能扩展自己的同时,也要识抬举,懂得被别人欣赏和包装

剑圣到现在还不是英雄,暴雪要给他加上英雄的光环,剑圣喜坏了

class yingxiong extends ren{
       Guanghuan  gh;  //光环
       ren     r;
       public yingxiong(ren r){
            this.ren = r;
            gh = new Guanghuan_x();
       }
}
js = new  yingxiong(js) ;js成了英雄,有了x光环。


 地球上的物质和联系组成了完整的地球生态,人和人之间的联系组成了社会形态,相对来说社会形态比计算环境更为复杂,我们系统中的对象也没有人这么灵活,如何让对象更具鲜活性,让我们的计算环境具备文化风景,是我们程序员永久的主题,也是源于生活的智慧!

0 0