15

Joshua Bloch の「Effective Java 」では、オプションでカスタマイズ可能ないくつかのパラメーターを使用してオブジェクトを構築するために使用できる Builder パターンについて説明しています。彼が提案する Builder 関数の命名規則は、「Ada や Python に見られるように、名前付きのオプション パラメータをシミュレートする」ものですが、Java の標準的な命名規則と一致していないようです。Java 関数は、関数を開始する動詞と、それが何をするかを説明する名詞ベースのフレーズに依存する傾向があります。Builder クラスには、その関数によって定義される変数の名前しかありません。

Builder パターンを利用する Java 標準ライブラリ内の API はありますか? 本書の提案を、Java ライブラリのコア セット内の実際の実装と比較してから、その使用を進めたいと思います。

4

7 に答える 7

6

Locale クラスには Builder パターンの例があります。 https://docs.oracle.com/javase/7/docs/api/java/util/Locale.Builder.html

使用法:

Locale locale = new Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build();
于 2016-06-10T13:00:37.800 に答える
5

効果的なjavaブックに最も正確な唯一のビルダーはStringBuilderです。この例との唯一の違いは、このビルダーがStringの内部クラスではないことです。

すべてのメソッドは、ビルダーオブジェクトをチェーンに返します。toString()メソッドはbuild()メソッドです。

于 2011-03-23T16:23:36.053 に答える
4

SAXParser良い例のようです:

  • SAXParser- 監督
  • ContentHandler- ビルダー

の一般的な使用法はSAXParserBuilder と同じです。

// Create Director
SAXParser parser = new org.apache.xerces.parsers.SAXParser();  
// Create Concrete Builder (our own class)
IndentingContentHandler handler = new IndentingContentHandler();
// Set Builder to Director
parser.setContentHandler(handler);
// Build
parser.parse(new InputSource(new FileReader(fileName));
// Get indented XML as String from handler
String indentedXML = handler.getResult();
于 2012-01-03T09:12:27.863 に答える
1

ProcessBuilder はほぼビルダー パターンのインスタンスですが、Java 命名規則を完全には使用していません。

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 マップ env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "サフィックス");
 pb.directory(new File("myDir"));
 プロセス p = pb.start();

SQL パッケージでは、PreparedStatement はビルダー パターンのインスタンスと見なすことができます。

PreparedStatement stmt = conn.prepareStatement(getSql());
 stmt.setString(1, ...);
 stmt.setString(2, ...);
 結果セット rs = stmt.executeQuery();
 ...
 stmt.setString(2, ...);
 rs = stmt.executeQuery();
 ...
于 2010-02-04T20:18:34.007 に答える
0

これは標準ライブラリで定義されている (実装されていない) だけですが、JDBC DataSource オブジェクトはビルダー パターンを思い起こさせます。DataSource オブジェクトを作成し、いくつかのプロパティを設定して接続を確立します。

これがコード例です...

DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB");
ds.setServerName("my_database_server");
ds.setDescription("the data source for inventory and personnel");
Connection con = ds.getConnection("genius", "abracadabra");
于 2010-01-30T19:49:03.937 に答える