LoginSignup
1
0

More than 5 years have passed since last update.

【Java】Builderパターンで実装されたクラスを使う関数を実装する

Last updated at Posted at 2019-02-17

注釈

何か設定してから自分自身を返すような実装全てをBuilderパターンとします。

やりたかったこと

SimpleJdbcInsertを使ってインサートするため、以下のようなコードが量産されていました。

new SimpleJdbcInsert(Jdbcテンプレート)
        .Builderの処理
        .execute(new BeanPropertySqlParameterSource(挿入するオブジェクト));

このコードでは一々SimpleJdbcInsertBeanPropertySqlParameterSourcenewする辺りが非効率で、その他の理由からもプロジェクト全体で効率化への需要があったため、関数で処理をラップすることで効率化を図ろうとしました。

問題になったこと

SimpleJdbcInsertBuilderパターンで実装されているため、関数を実装する初期化済みのインスタンスを渡すぐらいしか実装が思いつきませんでした。
しかし、これでは全く効率化していないに等しいです。

全く効率化していないコード
ラップ関数(new SimpleJdbcInsert(Jdbcテンプレート).Builderの処理, 挿入するオブジェクト);

解決方法

Fluent Builderパターン(ローンパターン)的な書き方をすることで効率的に実装できました。

//ラップ関数
public int insertExecute(UnaryOperator<SimpleJdbcInsert> builder, Object entity) {
    return builder.apply(new SimpleJdbcInsert(Jdbcテンプレート))
            .execute(new BeanPropertySqlParameterSource(entity));
}

//利用例
insertExecute(it -> it.ビルダー処理, 挿入するオブジェクト);

「ビルダーによる生成処理が邪魔ならそれを受け取ってしまえばよい」という発想がとっさに出てこなかったのは勉強不足ですね……。

参考にさせていただいた記事

Javaで書くBuilderパターンのパターン - Qiita

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0