- 必須フィールドを設けたい
- あるフィールドには自動で値を入れたい
- 中途半端なオブジェクトを利用者に使わせたくない
みたいなことをしたくて、オブジェクトの生成制御するデザインパターンあったよなぁと思って調べてたらBuilderパターンだった。
やりたかったのは以下のようなこと。
やりたかったのは以下のようなこと。
package com.kenjih.sample; public class User { private String name; private int age; private int id; private User(Builder builder) { this.name = builder.name; this.age = builder.age; this.id = 1234; // TODO: Assign unique ID } public void sayHello() { System.out.printf("Hello! I am %s, %d years lod!\n", name, age); } static class Builder { private String name; private Integer age; Builder() {} Builder(String name, Integer age) { this.name = name; this.age = age; } Builder setName(String name) { this.name = name; return this; } Builder setAge(int age) { this.age = age; return this; } User build() { if (name == null || age == null) throw new NullPointerException(); return new User(this); } } public static void main(String[] args) { User u1 = new User.Builder("Taro", 20).build(); u1.sayHello(); User u2 = new User.Builder().setName("Hanako").setAge(15).build(); u2.sayHello(); User u3 = new User.Builder().setName("Jiro").build(); // NullPointerException u3.sayHello(); } }
0 件のコメント:
コメントを投稿