來源:zhihu.com/question/277243683/answer/393676961
這問題你應該去問企業級Java架構師。
就比如print一句hello world吧。main函數裏print一下?太面向過程,太low了。
得封裝一個類。叫Printer. Printer有個成員方法,叫print。
但是!光一個類太low了,以後要是有不同的實現怎麼辦?所以得加一個接口。PrinterInterface。
但是!interface是沒有實現的,還是要有默認實現纔行。所以得加個虛擬類,AbstractPrinter實現PrinterInterface,然後Printer繼承AbstractPrinter。
但是!你有了那麼一套,該怎麼創建實例呢?直接new Printer()?太low了,那叫實現依賴。肯定不行的,所以要搞一個工廠類,PrinterFactory,PrinterFactory用PrinterInterface返回實例,這樣就隱藏了實現細節了。
但是!PrinterFactory本身也是實現類啊,太low了,所以得有PrinterFactoryInterface, AbstractPrinterFactory.
而且在PrinterFactory裏面該怎麼寫呢?直接new Printer()? 太low了。還是實現依賴。
最後,你要把這一堆玩意在代碼裏組裝起來,也太難看了,各種new實現類。太low!
好在我們有個高級玩意,叫依賴注入!把程序對象結構全寫到配置文件裏面。這一套當然是不能自己造輪子的。配置Spring吧。搞了那麼多lib,靠命令行或者IDE的項目管理肯定不夠啊,得有依賴管理。Maven啊Gradle啊使勁上。
最最後,要print的東西怎麼傳給程序呢?硬編碼?命令行傳參數?太low!當然得寫在XML裏頭。
光是XML當然還不夠企業級,再加上DTD驗證吧。
然後就涉及到了XML解析的問題了。代碼裏直接操起parser嗎?太low! 當然要寫個parser的包裝類,interface, abstract class, implementation class, factory class再來一套。畢竟,不能依賴實現啊,以後我要是換parser了怎麼辦。
所以最後是成品是一堆配置文件,一堆jar,compile出來的程序200MB。
IDE得裝上300個插件,打開項目硬盤響老半天喫掉2GB內存,然後一堆插件彈提示要求升級。
哦對了,在這一切發生之前,還得畫UML圖呢。
三年後項目完工了,部署到客戶的服務器上一跑,立馬崩潰,一地的stack trace。原來客戶服務器上用的是JDK 5而新項目需要JDK 6. 然後問客戶你們不能升級嗎,答案是不行,因爲另外一個企業級開發組給做的企業級解決方案只支持JDK 5。接着客戶把你們的架構師臭罵了一頓,你搞了那麼多設計就沒有想過可能會換JDK嗎?
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這纔是優雅的方式!!
覺得不錯,別忘了隨手點贊+轉發哦!