Java におけるコード進化パターン (Code Evolution Patterns in Java) - Micro Patterns
asato shimotaki <asatohan at gmail.com>
最終更新日 : 2008/10/4 (2008/10/4 本ページから分割)
GoF デザインパターン関連
Data Manager クラスの追加
タイプ:
before:
after:
public class DataManagerClass {
private int intProperty;
private String stringProperty;
public void setIntProperty(int intProperty) {
this.intProperty = intProperty;
}
public int getIntProperty() {
return intProperty;
}
public void setStringProperty(String stringProperty) {
this.stringProperty = stringProperty;
}
public String getStringProperty() {
return stringProperty;
}
}
参考文献とリソース
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
パラメータからの Data Manager クラスの抽出
タイプ:リファクタリング
before:
public class MapChipImageInfoOutputter {
public void output(int mapChipImageWidth, int mapChipImageHeight) {
System.out.println("幅 : " + mapChipImageWidth);
System.out.println("高さ : " + mapChipImageHeight);
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
MapChipImageInfoOutputter outputter = new MapChipImageInfoOutputter();
outputter.output(80, 80);
}
}
after:
public class MapChipImageInfo {
private int mapChipImageWidth;
private int mapChipImageHeight;
public MapChipImageInfo(int mapChipImageWidth, int mapChipImageHeight) {
this.mapChipImageWidth = mapChipImageWidth;
this.mapChipImageHeight = mapChipImageHeight;
}
public int getMapChipImageWidth() {
return mapChipImageWidth;
}
public int getMapChipImageHeight() {
return mapChipImageHeight;
}
}
public class MapChipImageInfoOutputter {
public void output(MapChipImageInfo mapChipImageInfo) {
System.out.println("幅 : " + mapChipImageInfo.getMapChipImageWidth() );
System.out.println("高さ : " + mapChipImageInfo.getMapChipImageHeight() );
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
MapChipImageInfo mapChipImageInfo = new MapChipImageInfo(80, 80);
MapChipImageInfoOutputter outputter = new MapChipImageInfoOutputter();
outputter.output( mapChipImageInfo );
}
}
参考文献とリソース
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
Data Manager クラスへの setter/getter の追加
タイプ:追加。
前提:Data Manager クラスが存在する。
before:
public class DataManager {
private int data1;
private int data2;
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public int getData2() {
return data2;
}
public void setData2(int data2) {
this.data2 = data2;
}
}
after:
public class DataManager {
private int data1;
private int data2;
private int data3;
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public int getData2() {
return data2;
}
public void setData2(int data2) {
this.data2 = data2;
}
public int getData3() {
return data3;
}
public void setData3(int data3) {
this.data3 = data3;
}
}
参考文献とリソース
議論
例
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
Function Pointer クラスの追加
タイプ:
before:
after:
public class FunctionPointerClass {
public void method() { }
}
参考文献とリソース
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
Function Pointer クラスの抽出
タイプ:リファクタリング
before:
public class MyClass {
public void method() {
log("abc");
}
private void log(String str) {
System.out.println(str);
}
}
after:
public class MyClass {
public void method() {
new MyLogFunctionPointerClass().log("abc");
}
}
public class MyLogFunctionPointerClass {
public void log(String str) {
System.out.println(str);
}
}
参考文献とリソース
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
Function Object クラスの抽出
タイプ:リファクタリング
before:
public class Item {
private String name;
private int price;
public Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
}
public class Main {
public static void main(String[] args) {
Map<String, Item> itemMap = new HashMap<String, Item>();
itemMap.put("sword", new Item("剣", 100));
itemMap.put("shield", new Item("盾", 70));
itemMap.put("armor", new Item("鎧", 120));
// ...
}
}
after:
public class Item {
private String name;
private int price;
public Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
}
public class ItemManager {
private Map itemMap = new HashMap();
public ItemManager() {
itemMap.put("sword", new Item("剣", 100));
itemMap.put("shield", new Item("盾", 70));
itemMap.put("armor", new Item("鎧", 120));
}
public Item getItem(String name) {
return itemMap.get(name);
}
}
public class Main {
public static void main(String[] args) {
ItemManager itemManager = new ItemManager();
// ...
}
}
参考文献とリソース
進化パス
パターン関係
関連パターン
参考文献とリソース
todo
参考文献とリソース
更新履歴
todo