ブログのこのシリーズは、の他の記事を参照、デザインパターンの学習過程で収集した記事の彼のコレクションであるデザインモードポータル
ビルダーモデル説明
Builderパターンは、このモデルが良いカプセル化があり、生成に関するデザインパターンです。より達成することができますBuilderパターンを使用したシーンで、一般的な製品のカテゴリとビルダーのカテゴリは比較的安定であるため、主要なビジネス・ロジックは、全体のためのディレクターのカテゴリにカプセル化され、Builderパターンを効果的にパッケージを変更することができます使用します良好な安定性。
ビルダーモードでは、クライアントは、製品の内部構成の詳細を知る必要はありません、製品自体や製品を作成するプロセスは、同じ作成プロセスが異なる製品のオブジェクトを作成することができるようにデカップリング。
あなたはより細かく、製品の作成プロセスを制御することができます。より明確かつ簡単なの作成は、作成プロセスを制御するためのプログラムを使用するように、さまざまな方法で複雑な分解生成物を生成するステップ。
第二に、Builderパターンを容易に拡張することができます。新たなニーズがある場合は、クラスを完了するために新しいビルダーを実装することによって、それは基本的に変更せずに前にテストコードを採用していない、と元の関数の導入のため、危険。開閉の原則に沿って。
Builderパターンは、一般的に次の役割が含まれて
抽象ビルダークラス(ビルダー):製品のオブジェクトと抽象インタフェースを作成するためには、個々のコンポーネントを指定されています
特定建設クラス(concreteBuilder):異なる表現を構築する方法を書き換え、インタフェースビルダーを実装
製品カテゴリ(製品):コンクリート製品
クラス導体(ディレクター):ビルダーインターフェースの構築が使用してオブジェクト
BuilderパターンでJDK --StringBuilder
StringBuilder
クラスは、JDKの典型的なBuilderパターンの実施例です。私はこのクラスのクラス図を見てください:
私たちは、マップに基づいて、各役割に、状況の対応を見て:
StringBuilder:司令官の役割、StringBuilderのは、スーパー、特定のビルダーによって参照としてここにAbstractStringBuilder、StringBuilderのを継承しているため、ビルダーに固有の参照を保持しています。
AbstractStringBuilder:アペンド(文字c)方法追記インタフェースを実装するコンクリートビルダー、。
追記:抽象ビルダーは、オブジェクト定義されたインタフェースを作成します。
文字列:製品の役割。
また、StringBufferのも、Builderパターンを使用します。唯一の違いは、StringBufferのは、スレッドの安全性を確保するために、同期使用してということですが、StringBuilderのはスレッドセーフではありません。
実際には、私たちの通常の開発でBuilderパターンは、より多くのように反映されStringBuilder.append
、この連鎖のコール。StringBuilderのはどこ司令官の役割、appendメソッドは、私たちが作成した後の製品は、特定の製品を生成するためにtoStringメソッドを呼び出すことができたときに、製品の詳細を作成するプロセスです。例えば、次のコード
String str = new StringBuilder().append()
.append()
.toString();
このような多くの類似したコード、などがあります。
Header header = new HeaderBuilder()
.setClientId(SOAHeader.SOAP_CLIENT_ID)
.setCorrelationId(SOAHeader.SOAP_CORRELATION_ID)
.buildHeader();
我々は上記のようなコードを見た場合、通常の開発で、あなたは、Builderパターンを使用することができます。我々は常に著者は我々のコードは非常に有用強化するために、このようなシステムを設計している理由を確認するために、このようなコードに注意を払います。これは私の仕上げは、共通の開発フレームワークのデザインパターンの意図を要約です。
Builderパターンで春
春のJava開発者は、最も一般的に使用される開発フレームワークです。一部の人々は、春には、ソースコードのデザインパターンのごちそうであると言います。ソースコードでの春の外観は、デザインパターンを学ぶための良い方法です。
Springフレームワークでは、多くの場合、Builderパターンに関連しています:
- UriComponentsBuilder
- BeanDefinitionBuilder
これではBeanDefinitionBuilder
低いレベルでは、我々は通常使用されますされません。ここではUriComponentsBuilder
Builderパターン春を伝えるために。
春restTemplateツールで次のコードを、私たちは、リモートインタフェースを呼び出します。URLパラメータを構築する必要性を呼び出す前に。ここでは使用されているUriComponentsBuilder
ビルドに。
UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("127.0.0.1:8080").
path("/test").build(true);
URI uri = uriComponents.toUri();
RequestEntity<JSONObject> requestEntity = RequestEntity.post(uri).
//添加cookie(这边有个问题,假如我们要设置cookie的生命周期,作用域等参数我们要怎么操作)
header(HttpHeaders.COOKIE,"key1=value1").
//添加header
header(("MyRequestHeader", "MyValue")
accept(MediaType.APPLICATION_JSON).
contentType(MediaType.APPLICATION_JSON).
body(requestParam);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(requestEntity,JSONObject.class);
//响应结果
JSONObject responseEntityBody = responseEntity.getBody();
春は、私たちが通常使用時に細心の注意の下になるようにデザインパターンをたくさん持っています。私は確かにそこに収穫されると信じています。
BuilderパターンでMyBatisの
MyBatisの最も古典的なモデルビルダーは間違いSqlSessionFactoryプロセスを取得します。
ここで得られたSqlSessionFactoryの一般的な使用です。
CopyClassPathResource resource = new ClassPathResource("mybatis-config.xml");
InputStream inputStream = resource.getInputStream();
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
上記のコードが発見されたを通じて、それをチェックアウト行くにSqlSessionFactoryコードSqlSessionFactoryBuilderを作成します。
Copy//整个过程就是将配置文件解析成Configration对象,然后创建SqlSessionFactory的过程
//Configuration是SqlSessionFactory的一个内部属性
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
inputStream.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
}
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
コードは比較的単純ではなく、詳細な分析です。ここでは、各役割の下にリストされた非難は、あります。
- SqlSessionFactoryBuilder:司令官の役割
- BaseBuilder:抽象ビルダー
- XMLConfigBuilder:特定ビルダー
- SqlSessionFactory:製品を作成する必要があります
感情
光を学ぶ研究デザインパターンこのことは、より抽象的であるため、仕事をしません。あなたはより深い洞察力を持つために、特定のフレームワークと連携してプロジェクトを見ています。
あなたはそれを自分で行うには暇な時間を持っている場合は通常、いくつかの小さなフレームを書き込むためにデザインパターンを使用します。これらの主流のオープンソース・フレームワークのソースコードを見ることより、コードが両方の設計パターンに反映され、そこです。これらのフレームワークを見てみると、なぜあなたは収穫を見てより確かに多くのことが、これらのパターンを使用し、デザインパターンの理論的な知識と組み合わせます。