前面的继承是类的扩展方式,类在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光环。
地球上的物质和联系组成了完整的地球生态,人和人之间的联系组成了社会形态,相对来说社会形态比计算环境更为复杂,我们系统中的对象也没有人这么灵活,如何让对象更具鲜活性,让我们的计算环境具备文化风景,是我们程序员永久的主题,也是源于生活的智慧!