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