最近遇到項目 最基本的model 類設計是這樣的 model層public class ContractModel extends BaseModel { @Transient private static final long serialVersionUID = -7915586025811092910L; private Integer templatecategary; // //類型(1維保/2維修)是否有償(1有償/2無償)形式(1**加粗文字**收款/2付款) private String name; //合同名稱 private String code; //合同編碼 }但是后面又繼承了這個model層 不知道這樣設計有什么好處 public class ContractQueryModel extends **ContractModel**{ public String toString(){ return "Model"+this.getClass().getName()+","+super.toString()+" ,[]"; }}
3 回答

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
不確定你的問題是:“繼承的意義”?還是“為什么ContractQueryModel只重寫了toString
方法”?
如果是不理解“繼承的意義”?那我想,最基本的理解就是為了復用,可以看文檔:
文檔地址:Inheritance
如果你的疑惑是,為什么繼承了半天,最后只重寫了toString
方法?
最主要的原因我想是因為作者想要滿足開閉原則,想要一個新的toString
方法,又不想對原代碼ContractModel
作修改。無論如何,關于細節,你應該直接和作者討論,說不定他有更深層次的考慮。僅從你的代碼片段里,我看不出更多內容了。
補充:
我個人理解,這不算是“代理模式”,原因是她不符合“代理模式”的基本特征,關于代理模式,看如下圖解:
由此我們知道,代理模式下,代理類應該和被代理類實現相同接口,這里的ContractQueryModel
不具備此特征。
最后我想談談對于設計模式的粗淺理解,所謂設計模式是一種解決特定問題的最佳實踐范式,有些模式具備固定特征,有些則不具備。所以僅憑題主的幾個簡單的類,在脫離上下文的情景下,我很難判斷他是哪種設計模式(我指那些不具備固定特征的)。
添加回答
舉報
0/150
提交
取消