# åå»ºè æ¨¡å¼ ( Builder ) ## ç¨é > å°ä¸ä¸ªå¤æå¯¹è±¡çæé ä¸å®åå¼ï¼ä½¿å¾åæ ·çæé è¿ç¨å¯ä»¥äº§çä¸åç对象ã ## å®ä¾ > åå®éè¦çæä¸ä¸ªèæçäººç©æ¨¡åï¼äººç©ä¸»è¦å æ¬å 个ç®åç屿§ï¼å§åãå¹´é¾ãå½ç±ä»¥åè¤è²ãåå¦ä¸ä¸ªæ°æ®æ¨¡åçæ¥æå¾å¤å±æ§ï¼å¦æåçº¯ä½¿ç¨æé æ¹æ³æ¥å®ä¾å对象ï¼å¿å¿ ä¼é ææé æ¹æ³åæ°çç¸çé®é¢ï¼ä¹å¯ä»¥ç§°ä¹ä¸ºâåå¯ä¼¸ç¼©æé æ¹æ³æ¨¡å¼âã代ç çå¯è¯»æ§åå¯é æ§å¤§å¤§éä½ãæ¤æ¶ï¼å¯ä»¥ä¸ºè¿ä¸ªå¯¹è±¡å建çè¿ç¨æå®ä¸ä¸ªå建è ï¼æä»¬åªéè¦ååå»ºè æè¿°è¯¥å¯¹è±¡çä¸äºå ·ä½ç»èï¼æ¥ä¸æ¥çæé è¿ç¨å°±ç»ç»äº¤ç»å建è 宿äºã > 以䏿¯âåå¯ä¼¸ç¼©æé æ¹æ³æ¨¡å¼âçä¸ä¸ªå®ä¾ï¼ ``` public Person(String name,Integer age,Nationality nationality,SkinColor skinColor...){...} ``` > 妿ä¸ç´è¿æ ·ä¸å»ï¼éç屿§çå¢å¤ï¼æé æ¹æ³çåæ°çæ°éä¹ä¼åå¾è¶æ¥è¶å¤ï¼å¯¹äºå¼åäººåæ¯é常头ç¼çã坹屿§çæ´æ¹ä½¿å¾æé æ¹æ³çç»´æ¤é¾åº¦å¢å äºä¸å°ï¼è¿å°±æ¯æè°çâåå¯ä¼¸ç¼©æé æ¹æ³æ¨¡å¼âã ## 模å¼åæ **Person ç±»** ``` public class Person { private final String name; private final Integer age; private final Nationality nationality; public String getName() { return name; } public Integer getAge() { return age; } public Nationality getNationality() { return nationality; } public SkinColor getSkinColor() { return skinColor; } private final SkinColor skinColor; public Person(Builder builder) { this.name = builder.name; this.age = builder.age; this.skinColor = builder.skinColor; this.nationality = builder.nationality; } } ``` **Person ç±»çå建è ** ``` public static class Builder { private String name; private Integer age; private Nationality nationality; private SkinColor skinColor; public Builder age(Integer age) { this.age = age; return this; } public Builder name(String name) { if (null == name) { throw new IllegalArgumentException("äººå¿ é¡»æåå!"); } this.name = name; return this; } public Builder nationality(Nationality nationality) { this.nationality = nationality; return this; } public Builder skinColor(SkinColor skinColor) { this.skinColor = skinColor; return this; } public Person build() { return new Person(this); } } ``` **Person 类对象çæé è¿ç¨** ``` Person personWang = new Person.Builder() .name("å°ç") .age(25) .nationality(Nationality.CHINA) .skinColor(SkinColor.YELLOW) .build(); ``` ## éç¨åºæ¯ > * å建ä¸ä¸ªå¤æå¯¹è±¡çç®æ³åºè¯¥ç¬ç«äºç»æå¯¹è±¡çç»æé¨å以åå®ä»¬æ¯å¦ä½ç»åç > * æå»ºè¿ç¨å¿ 须为ææé ç对象æä¾ä¸åç表示形å¼