前面的繼承是類的擴展方式,類在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光環。
地球上的物質和聯繫組成了完整的地球生態,人和人之間的聯繫組成了社會形態,相對來說社會形態比計算環境更爲複雜,我們系統中的對象也沒有人這麼靈活,如何讓對象更具鮮活性,讓我們的計算環境具備文化風景,是我們程序員永久的主題,也是源於生活的智慧!