關於重構的一點練習
我們總是在重複的造輪子。
2019年下半年就想要寫一個鬥地主記牌器的Java程式,結果到了現在也是僅僅完成了截圖的功能。
分享這篇部落格主要目的是分享一下關於重構的一點實踐成果,順便貼上程式碼。
早期時為了找螢幕截圖並獲取畫素點的Java原始碼,很難找,最後發現了一位博主寫的程式碼,結果結構比較混亂,非常難讀(也許是我技術不到位)。月前看了本關於重構的書,前幾天又想要寫鬥地主記牌器的程式,找呀找終於又找到了它,然後又是無從下手,於是練習了一下重構。專案是使用eclipse編寫的程式碼,用Git建立了一個本地倉庫(就在專案資料夾下的.git資料夾裡)儲存了每一次修改,由於英語水平有限,commit message中夾雜了中文,可能有些語句不太通順,歡迎大家評論區吐槽。
程式碼的專案資料夾我已上傳到資原始檔中,在文末會附上下載連結,當然是免費的。
下面就是附上的部分原始碼了,原始碼中註釋基本沒有,都是寫在了commit message中,歡迎在eclipse中使用Git與我一起開啟重構之旅!
下面這個類是實現螢幕截圖的類,是重構後的結果。
package qdu.lf.get;
import java.awt.AWTException;
import java.awt.HeadlessException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ScreenShot {
private final static String defaultImageFormater = "png";
private BufferedImage bufferedImage;
private static String path = "d:";
private static String name = "temp.png";
public static void setPath(String path) {
ScreenShot.path = path;
}
public static void setName(String name) {
ScreenShot.name = name;
}
public ScreenShot() {
File tempFile = new File(path, name);
setBufferedImage();
saveToFile(tempFile);
}
public ScreenShot(int x, int y, int w, int h) {
File tempFile = new File(path, name);
setBufferedImage();
bufferedImage = bufferedImage.getSubimage(x, y, w, h);
saveToFile(tempFile);
}
private void setBufferedImage() {
try {
bufferedImage = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException | AWTException e) {
e.printStackTrace();
}
}
private void saveToFile(File tempFile) {
try {
ImageIO.write(bufferedImage, defaultImageFormater , tempFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
重構是自動化測試驅動的,當然要有一個測試類來保證每一次修改都不會破壞原始碼的功能了,不過測試還不太會,只是簡單加了幾個測試類,見諒見諒。
package qdu.lf.get;
import org.junit.Test;
public class ScreenShotTest {
@Test
public void test_nonparametric_construction_method_ScreenShot() {
new ScreenShot();
}
@Test
public void test_construction_method_ScreenShot_by_method_setPath_and_setName() {
ScreenShot.setName("temp1.png");
ScreenShot.setPath("d:");
new ScreenShot();
}
@Test
public void test_construction_method_ScreenShot_with_parameters_x_y_w_h_about_subimage() {
ScreenShot.setName("temp2.png");
new ScreenShot(700, 600, 300, 100);
}
}
最後還有一個類,主要是建了一個執行緒類持續截圖的,很簡單。
package qdu.lf.get;
public class ContinuedRunningScreenShot {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread();
thread.start();
for (int i=0; i<20; i++) {
Thread.sleep(100);
// ScreenShot.setName("temp-"+i+".png");
new ScreenShot();
}
}
}
補充一句,截圖後的圖片在d盤,是png圖片檔案。
最後,資源稽核還沒通過,通過後會附上下載連結。或者可以直接在本賬號分享的資源中查詢。
相關文章
- mysql練習 —— 關於一些函式的使用MySql函式
- 關於程式設計的基本練習程式設計
- Machine Learning (11) - 關於 Decision Tree 的小練習Mac
- 一個關於組隊精進學習的構思
- Machine Learning(16) - 關於 K Means Clustering 的練習題Mac
- 關於本書的一點想法
- 關於git flow的一點思考Git
- 關於 Method Swizzling 的一點思考
- 關於同步的一點思考-下
- 關於我在學習Swoole的痛點
- Machine Learning (7) - 關於 Logistic Regression (Binary Classification) 的小練習Mac
- Machine Learning (9) - 關於 Logistic Regression (Multiclass Classification) 的小練習Mac
- Machine Learning (6) - 關於 Logistic Regression (Multiclass Classification) 的小練習Mac
- 關於Quick.logger的一點點補充UI
- 關於區塊鏈錢包的六大重點區塊鏈
- 關於關卡設計的一點積累
- 關於資料結構的學習心得資料結構
- 關於結構體型別的學習結構體型別
- 關於學習 Linux 系統結構的一些總結Linux
- 關於碳中和的一點淺談
- 關於黑暗力量(BlackEnergy)的一點思考
- 關於 JMeter 5.4.1 的一點記錄JMeter
- 關於社交圈子的一點思考
- 關於range的一個知識點
- 關於開發流的一點思考
- 自學linux第一關練習題Linux
- 日常Java練習題(每天進步一點點系列)Java
- 關於網站設計的一點點討論網站
- webpack 拆包:關於 splitChunks 的幾個重點屬性解析Web
- 關於學習-Linux-系統結構的一些總結Linux
- 一、Python複習教程(重點)- 基礎Python
- 關於AP的一些知識點
- 關於遊戲付費的一點想法遊戲
- [Android] 關於 Model 層的幾點思考(一)Android
- 關於如何看原始碼的一點思考原始碼
- 關於v-for的一點小總結
- 關於BP演算法的一點理解演算法
- 關於重慶哪裡可以開票-重慶新聞熱點