我需要一些關於如何構建我的Java應用程序的建議。我個人喜歡決定 - 比如在Python或C++中 - 如果我編程OO或不。對我而言,靜態是一種在Java中執行相同操作的方法。編程「靜態」的另一種方法是:代碼正常嗎?
我讀過,大多數人說靜態是「邪惡」。所以我想到了另外一個選擇,就是用靜態方法來做同樣的事情。
什麼有關創建一個名爲「StaticClasses」包含每個類,它的方法/屬性通常將是靜態的一個實例的類。
我可以創建的StaticClasses
一個實例,並設置在創建每個對象此實例的引用。
我甚至可以創建新的對象類mObject
,這是新的父級的一切 - 對象後直接設置這些引用。
而且我可以使StaticClasses
類辛格爾頓。
只是小代碼示例,讓你知道我的意思:
// mObject.java
public class mObject{
static StaticClasses staticCl = StaticClasses.I;
}
// StaticClasses.java
public class StaticClasses{
public static StaticClasses I = new StaticClasses();
// declare instance of each "static" class
public Example0 ex0 = new Example0();
public Example1 ex1 = new Example1();
private StaticClasses(){
}
}
// Example0.java
public class Example0 extends mObject{
public void do_something(){
System.out.println("function call example 0");
}
}
// Example1.java
public class Example1 extends mObject{
public void do_something2(){
// class "static" function
staticCl.ex0.do_something();
}
public static void main(String[] args){
// call "static" function
staticCl.ex1.do_something2();
}
}
這是一個好的或不好的想法?你知道有什麼改進嗎?你知道這個代碼的缺點嗎?靜態應該有更好的性能,但不應該有太大的區別。或者我應該在需要的地方手動設置引用 - 即使這意味着更復雜的代碼。
UPDATE:
你不喜歡單身。不帶單身人士的新代碼(名稱不是最終的):
// mObject.java
public class mObject{
Classes cl;
public mObject(Classes c){
cl=c;
}
}
// Classes.java
public class Classes{
// declare instance of each "static" class
public Example0 ex0 = new Example0(this);
public Example1 ex1 = new Example1(this);
}
// Example0.java
public class Example0 extends mObject{
public void do_something(){
System.out.println("function call example 0");
}
}
// Example1.java
public class Example1 extends mObject{
public void do_something2(){
// class "static" function
cl.ex0.do_something();
}
public static void main(String[] args){
// call "static" function
cl.ex1.do_something2();
}
}
如果它們不是靜態的,我不會稱之爲'StaticClasses'。 – shmosel
這是[常量'接口'反模式](https://en.wikipedia.org/wiki/Constant_interface)的擴展使用[上帝對象](https://en.wikipedia.org/wiki/God_object )來保存你的單身人士。通過創造一些真正可怕的東西,你正在避免一個Java的「詔書」(「靜態」是邪惡的)。我會**強烈**建議你避免像瘟疫這樣的模式。如果某些東西需要是單身人士,請使用['enum' singleton pattern](http://stackoverflow.com/a/23721155/2071828)。我會進一步建議你閱讀關於DI - 這是建議,而不是全球狀態。 –
爲什麼在mObject中重新定義「StaticClasses」的實例「I」,而您可以通過StaticClasses.I訪問它? –