⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +ݢ

📁 一个好的设计模式例子
💻
字号:
// Director.java
/**
 * This class is used to read data from text file, 
 * then pass the data to TestCaseBuilder's buildXXX
 * method to construct part of the TestCaseObject.
 */
public class Director {
	private final String FILENAME = "TestCaseData.txt";
	private final int INT = 0;
	private final int LONG = 1;
	private final int FLOAT = 2;
	private final int DOUBLE = 3;
	private final int CHAR = 4;
	private final int STRING = 5;
	
	// Reference to Builder.
	private Builder builder;
	
	// This ArrayList contains data read from file, 
	// every item in it represents a property in TestCaseObject,
	// it's format is "PropertyName, Type, Value",
	// the Type is listed above.
	private java.util.ArrayList dataLines;
	
	// Constructor, initiate builder and dataLines.
	public Director() {
		builder = new TestCaseBuilder();
		dataLines = new java.util.ArrayList();
	}
	
	public static void main(String[] args) {
		try {
			readFromFile();
			Object testCaseObject = buildTestCaseObject();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void readFromFile() {
		// read data from file and put them into dataLines.
	}
	
	private void buildTestCaseObject() throws Exception {
		int length = dataLines.size();
		for (int i = 0; i < dataLines; i++) {
			// Use StringTokenizer to parse string.
			String property = "";
			int type = INT;
			String value = "";
			java.util.StringTokenizer tokenizer = 
				new java.util.StringTokenizer((String)dataLines.get(i), ",");
			int item = 0;
			while (tokenizer.hasMoreElement()) {
				if (item == 0) {
					property = tokenizer.nextElement();
				}
				if (item == 1) {
					String s = tokenizer.nextElement();
					type = Integer.parseInt(s);
				}
				if (item == 2) {
					value = Integer.parseInt(s);
				}
				
			}
			switch (type) {
				case INT:		builder.buildInt(property, value);
								break;
				case LONG:		builder.buildLong(property, value);
								break;
				case FLOAT:	builder.buildFloat(property, value);
								break;
				case DOUBLE:	builder.buildDouble(property, value);
								break;
				case CHAR:		builder.buildChar(property, value);
								break;
				case STRING:	builder.buildString(property, value);
								break;
				default:		throw Exception("Invalid type.");
			}
		}
		return builder.getProduct();
	}
}
具体生成器TestCaseBuilder创建TestCaseObject的各个部分。
// TestCaseBuilder.java
/**
 * This class is used to build a TestCaseObject.
 */
public class TestCaseBuilder extends Builder {
  TestCaseObject obj;
  
  public TestCaseBuilder() {
    obj = new TestCaseObject();
  }
  
  public Object getProduct() {
    return obj;
  }
  
  public void buildInt(String property, String value) {
    // Use reflection to get the property name.
    try {
      java.lang.reflect.Field f = Class.forName("TestCaseObject").getField(property);
      f.setInt(obj, Integer.parseInt(value);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    
  }
  
  public void buildLong(String property, String value) {
    // Use reflection to get the property name.
    try {
      java.lang.reflect.Field f = Class.forName("TestCaseObject").getField(property);
      f.setInt(obj, Long.parseLong(value);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void buildLong(String property, String value) {
    ......
  }
}

    抽象生成器Builder定义了生成对象每个部分的方法。
// Builder.java

/**
 * This is a abstract class defined methods to build parts of a product.
 */
 
public abstract class Builder {
  public Builder() {
  }
  
  public Object getProduct() {
    return null;
  }
  
  public void buildInt(String property, String value) {
  }
  
  public void buildLong(String property, String value) {
  }
  
  ......
  
} 

// TestCaseObject.java

/**
* Product class.
 */

public class TestCaseObject {
  public int i;
  public long l;
  public String s;
}
这个简单的例子演示了如何使用Builder模式,实际的应用可能会比较复杂,但无论如何,在创建复杂的对象并且想重用创建过程时,可以考虑使用Builder模式。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -