在我的UI項目中,我有幾個共享相同標題樣式的屏幕,只有文本特定於屏幕。什麼將是一個很好的實現方式?使用java抽象類
- 有超類創建所有的頭組件並打開組件的子類,子類將訪問組件的setText方法來更新文本?
或
- 有超類的抽象方法來創建組件,子類將實現這些方法來創建組件。
希望它是有意義..
在我的UI項目中,我有幾個共享相同標題樣式的屏幕,只有文本特定於屏幕。什麼將是一個很好的實現方式?使用java抽象類
或
希望它是有意義..
創建通用頭方法的抽象類,並確定實施將是最好的所有子類的一種方法。
取決於您是否希望超類能夠被實例化。這就像有一個Animal
超類,Dog
和Cat
子類。你想讓人們能夠創建一個通用的Animal
?
如果是這樣,它應該是一個普通的類。如果不是,則應聲明爲abstract
。
所以最終問題是:是否有默認行爲?如果不是,那就把它抽象化。
你真的需要抽象類嗎?
public class UIScreen {
public UIScreen(String headerText) {
//set everything up here w/ the right text
}
}
// elsewhere ....
UIScreen mainScreen = new UIScreen("Main Screen");
當行爲不斷變化時...將其封裝在abstact類或接口中。
其更好地有
Abstract class, with the non-abstract method to create the Header,
and an Abstract method to create the text
..In子U類可以通過實現抽象的方法來創建你所選擇的文本。
然後我需要訪問組件,設置組件(Label)中的文本,爲什麼不直接打開組件到子類(但是這樣子類不會被迫改變文本) – Paneri
「在超類中有抽象方法來創建組件,子類將實現這些方法來創建組件。」
在我看來,這個解決方案更容易維護。
你可以改變你的選擇1稍微
public abstract class SuperUI {
private HeaderComponenet headerComponent;//have getter setter
}
public class BaseUI extends SuperUI{
private void changeHeaderComponent(){
headerComponent.setText("Changed");
}
}
public class HeaderComponent extends JComponent{
public HeaderComponent(){
//create the default header here
}
}
在這種情況下,如果默認的標題組件必須改變你不必改變你的SuperUI,因爲你已經從SuperUI分離的頭,你如果需要,可以對頁腳組件執行相同的操作。
我的問題是子類是否有任何有用的功能?如果沒有,爲什麼你不只有一個具體的類,並傳遞一些數據容器來填充字段?
如果沒有行爲差異,只需將數據和/或協作者傳遞給構造函數或通過屬性設置器即可。
所有的子類都會除了標題樣式以外,還有其他行爲。 – Paneri
選擇選項1. :-) – maksimov
有抽象方法。這樣,你永遠不會忘記改變文本,因爲你將不得不重寫它。並且在將來它將更容易找到頭部被改變的位置。儘管我認爲 –
只有文本在屏幕之間變化。換句話說:實現取決於包含該文本的特定「字符串」。 [Esteban Araya的回答](http://stackoverflow.com/a/10918371/1332414)通過它的構造函數表達了這種依賴關係。 – Torious