大家好呀,想死你們了。
時不時就有讀者私信我,“松哥,我的代碼寫得很爛,該怎麼辦呀?”
寫代碼確實是門手藝活,這是我們程序員不得不承認的一個事實,畢竟要用手指頭來敲啊!不是手藝活是啥(笑)
簡單來分析一下代碼寫得爛的原因哈。其一,可能是剛入門,代碼寫得少,如果我們滿打滿算只寫過一兩千行代碼,是不可能寫出多優雅的代碼的。其二,可能我們不懂設計模式,設計模式是軟件設計中常見問題的典型解決方案,它們就像能根據需求進行調整的預製藍圖, 可用於解決代碼中反覆出現的設計問題,如果不懂設計模式的話,遇到這些問題就只能抓瞎了。
這麼說吧,設計模式玩得爐火純青,寫出的代碼就更優雅,閱讀起來也會更加舒服,可維護性、可擴展性就更強。
說到這,我確信大家已經瞭解設計模式的重要性了!那該怎麼學好呢?
松哥來推薦一個學習網站:Refactoring Guru。
網址如下所示:
https://refactoring.guru
這雖然是一個國外的網站,卻神奇的實現了中文化國際化,愛了愛了,無情地愛了。據作者說,他建站的初衷就是爲了幫助我們程序員,快速地掌握設計模式,但把網站做到這種用心的程度,我只能情不自禁地點讚了!
來看一下設計模式的目錄吧(下圖中只展現了創建型模式和結構型模式中的一部分,還有行爲模式):
每個模式都會對應一篇圖文並茂的文章,閱讀起來就好像在讀繪本一樣,生動有趣,令人印象深刻,學起來就沒有半點枯燥的感覺。來看一下工廠方法模式的一部分內容截圖,這圖片的質量,確實高啊,不服不行!
配套的代碼示例也非常完整,來看一下 Java 版的:
public class WindowsButton implements Button {
JPanel panel = new JPanel();
JFrame frame = new JFrame();
JButton button;
public void render() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hello World!");
label.setOpaque(true);
label.setBackground(new Color(235, 233, 126));
label.setFont(new Font("Dialog", Font.BOLD, 44));
label.setHorizontalAlignment(SwingConstants.CENTER);
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
frame.getContentPane().add(panel);
panel.add(label);
onClick();
panel.add(button);
frame.setSize(320, 200);
frame.setVisible(true);
onClick();
}
public void onClick() {
button = new JButton("Exit");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
System.exit(0);
}
});
}
}
當然了,代碼示例不只有 Java 版的,還有 C#、C++、Python、Go 等 8 種常見的編程語言。
這種圖文並茂 + 代碼示例的學習方式,極大地加深了我們程序員對知識的吸收。還有什麼讚美的詞語?學富五車的我竟然有點詞窮了。總之,如果大家也想學好設計模式,趕快點吧!
平臺上還提供了離線版 PDF 的購買入口。如果大家需要一份免費開源的,我就只能把我珍藏了 3 個月的《重學設計模式》貢獻出來了,截取一部分內容供大家預覽下。
裏面有不少圖文參照了 Refactoring Guru 這個網站,但也加入了作者自己的思考和理解,讀起來也更接地氣一點。按照作者說的:
很高興你能拿到這本書,如果你能堅持看完並按照書中的例⼦進行實踐,那麼在編程開發的世界里,就⼜多了了⼀個可以寫出良好代碼的⼈,同時也爲架構師培養儲備了了⼀個⼈才。
如果大家對這份 PDF 感興趣的話,可以通過下面的方式獲取。
第一步,掃碼或者長按識別下面的二維碼,關注「沉默王二」公衆號:
第二步,在公衆號後臺發送 010 獲取下載鏈接。
最後,求個贊吧!再冷的天,也抵擋不住我們學習的熱情!
本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。