天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

對象的協作

  面向對象設計的一個重要分析方法是利用對象的職責來驅動設計。對象有了職責,才會成為具體擁有意識的對象,成為對象社區中可以獨立完成,或者發出指令委派別的對象協作完成職責的一員。將對象看成是“具有職責的東西”。對象應該自己負責自己,而且應該清楚地定義職責。這就是對象設計的關鍵。好的軟件設計者應該像牧羊人一般放牧自己的牛羊,只需要給它們一片豐沃的草地,它們就能自己覓食生活。 

  Rebecca認為:對象在履行職責時有3種選擇,你可以任選其一:(1)親自完成所有的工作。(2)請求其他對象幫忙完成部分工作(和其他對象協作)。(3)將整個服務請求委托給另外的幫助對象。在分析對象職責時,可以考慮“專家”模式,即信奉專業的事情交給專家來完成,既不互相推諉,卻也不能越俎代庖。專家有其擅長的領域,如果把專家錯放在他不熟悉的領域,不僅會降低工作效率,還可能引入潛在危機。所謂“尺有所長,寸有所短”,含義正在于此。

  對象的能力總是有限的,正如我們不能將所有的雞蛋放在一個籃子里,我們也不能將所有的職責交給“上帝”。這既避免單一功能點帶來的風險,又能實現職責的分權。Christepher Alexander建議,在遇到設計問題時“盡量少用集權的機制”。軟件設計同樣如此。職責總是可大可小,面對復雜的職責行為,總是需要多個對象的協作才能完成,就像機器中的零部件,按部就班,各司其職。

  讓我們來設計一個數據分析器,它通過分析算法對輸入數據進行分析,并將結果保存在輸出集中。根據業務需求的不同,執行的分析算法也不相同。同時,為了提高分析性能,我們還需要采用多線程方式執行分析任務。從調用者的角度來看【即Martin Fowler提到的規約視角】,我們只關心分析需要的數據以及分析后的結果。那么,誰應該來承擔分析的職責呢?毫無疑問,我們可以定義分析器對象來履行這一職責。此外,調用者其實并不會關心分析算法的實現以及分析的過程,他希望分析是易于執行的,這一愿望通過有效的封裝完全可以滿足。我們可以將分析的職責封裝在DataAnalyzer類中,同時隱藏具體的分析算法。

public class Client {
public static void run(InputData input) {
DataAnalyzer analyzer
= new DataAnalyzer();
AnalyticResult result
= analyzer.analysis(input);
//做其它事情
//處理分析后的數據
handleOutput(analyzer.output(result));
}
}
public class DataAnalyzer {
public AnalyticResult analysis(InputData input) {}
public OutputData output(AnalyticResult result) {}
}

it知識庫對象的協作,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产白丝精品爽爽久久久久久蜜臀 | 好姑娘社区在线视频 | 玩弄人妻少妇500系列网址 | 87影院午夜福利 | 男女作爱在线播放免费网页版观看 | 91chinesevideo| 国产精品亚洲AV毛片一区二区三区 | 天天澡夜夜澡人人澡 | 日韩精品熟女一区二区三区中文 | 日本一区精品久久久久影院 | 中文无码热在线视频 | 教室眠催白丝美女校花 | 国产69TV精品久久久久99 | 亚洲视频无码中字在线 | 国产超碰人人爱被IOS解锁 | 最新果冻传媒在线观看免费版 | 大睾丸内射老师 | 国产AV电影区二区三区曰曰骚网 | 91热久久免费精品99 | 甜性涩爱在线看 | 亚州日韩精品AV片无码中文 | 快播h动漫网 | 日产精品久久久久久久蜜殿 | 亚洲视频网站欧美视频网站 | 麻豆精品传媒卡一卡二传媒短视频 | 国产 日韩 欧美 综合 激情 | 欧美午夜精品久久久久久浪潮 | GOGOGO高清免费播放 | 国产毛A片久久久久久无码 国产毛A片啊久久久久久A | 在线A亚洲老鸭窝天堂AV高清 | 欧美成人无码A区在线观看免费 | 丰满人妻无码AV系列 | 色WWW永久免费视频首页 | 51精品国产AV无码久久久 | 午夜性爽视频男人的天堂在线 | 男女疯狂一边摸一边做羞羞视频 | 国产人妻人伦精品59HHH | 1024人成网站色www下载 | 美女扒开尿口让男生添动态图 | 亚洲欧洲精品成人久久曰影片 | 亚洲视频在线观看不卡 |