栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将构建器放在单独的类中(流利的界面)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将构建器放在单独的类中(流利的界面)

使用组成。为了使事情变得更加轻松和整洁,请不要在source(

Foo
)和builder(
Builder
)类中复制所有属性。

例如,在

Foo
类内部
Builder
而不是每个
Foo
属性。

简单的代码段:

import java.util.*;class UserBasicInfo{    String nickName;    String birthDate;    String gender;    public UserBasicInfo(String name,String date,String gender){        this.nickName = name;        this.birthDate = date;        this.gender = gender; }    public String toString(){        StringBuilder sb = new StringBuilder();        sb.append("Name:DOB:Gender:").append(nickName).append(":").append(birthDate).append(":").        append(gender);        return sb.toString();    }}class ContactInfo{    String eMail;    String mobileHome;    String mobileWork;    public ContactInfo(String mail, String homeNo, String mobileOff){        this.eMail = mail;        this.mobileHome = homeNo;        this.mobileWork = mobileOff;    }        public String toString(){        StringBuilder sb = new StringBuilder();        sb.append("email:mobile(H):mobile(W):").append(eMail).append(":").append(mobileHome).append(":").append(mobileWork);        return sb.toString();    }}class FaceBookUser {    String userName;    UserBasicInfo userInfo;    ContactInfo contactInfo;    public FaceBookUser(String uName){        this.userName = uName;    }        public void setUserBasicInfo(UserBasicInfo info){        this.userInfo = info;    }    public void setContactInfo(ContactInfo info){        this.contactInfo = info;    }        public String getUserName(){        return userName;    }    public UserBasicInfo getUserBasicInfo(){        return userInfo;    }    public ContactInfo getContactInfo(){        return contactInfo;    }    public String toString(){        StringBuilder sb = new StringBuilder();        sb.append("|User|").append(userName).append("|UserInfo|").append(userInfo).append("|ContactInfo|").append(contactInfo);        return sb.toString();    }    static class FaceBookUserBuilder{        FaceBookUser user;        public FaceBookUserBuilder(String userName){ this.user = new FaceBookUser(userName);        }        public FaceBookUserBuilder setUserBasicInfo(UserBasicInfo info){ user.setUserBasicInfo(info); return this;        }        public FaceBookUserBuilder setContactInfo(ContactInfo info){ user.setContactInfo(info); return this;        }        public FaceBookUser build(){ return user;        }    }}public class BuilderPattern{    public static void main(String args[]){        FaceBookUser fbUser1 = new FaceBookUser.FaceBookUserBuilder("Ravindra").build(); // Mandatory parameters        UserBasicInfo info = new UserBasicInfo("sunrise","25-May-1975","M");        // Build User name + Optional Basic Info         FaceBookUser fbUser2 = new FaceBookUser.FaceBookUserBuilder("Ravindra").    setUserBasicInfo(info).build();        // Build User name + Optional Basic Info + Optional Contact Info        ContactInfo cInfo = new ContactInfo("xxx@xyz.com","1111111111","2222222222");        FaceBookUser fbUser3 = new FaceBookUser.FaceBookUserBuilder("Ravindra").    setUserBasicInfo(info).    setContactInfo(cInfo).build();        System.out.println("Facebook user 1:"+fbUser1);        System.out.println("Facebook user 2:"+fbUser2);        System.out.println("Facebook user 3:"+fbUser3);    }}

输出:

Facebook user 1:|User|Ravindra|UserInfo|null|ContactInfo|nullFacebook user 2:|User|Ravindra|UserInfo|Name:DOB:Gender:sunrise:25-May-1975:M|ContactInfo|nullFacebook user 3:|User|Ravindra|UserInfo|Name:DOB:Gender:sunrise:25-May-1975:M|ContactInfo|email:mobile(H):mobile(W):xxx@xyz.com:1111111111:2222222222

说明:

  1. FaceBookUser
    是一个复杂对象,具有以下使用合成的属性:

    String userName;

    UserBasicInfo userInfo;
    ContactInfo contactInfo;

  2. FaceBookUserBuilder
    是静态构建器类,其中包含和builds
    FaceBookUser

  3. userName是构建FaceBookUser的唯一必需参数

  4. FaceBookUserBuilder
    建立
    FaceBookUser
    通过设置可选参数:
    UserBasicInfo
    ContactInfo

  5. 本示例说明了

    FaceBookUsers
    从Builder构建的具有不同属性的三个不同属性。

    1. fbUser1被构建为仅具有userName属性的FaceBookUser
    2. fbUser2被构建为FaceBookUser,具有userName和UserBasicInfo
    3. fbUser3被构建为FaceBookUser,具有userName,UserBasicInfo和ContactInfo

在此示例中,已使用合成,而不是在Builder类中复制FaceBookUser的所有属性。

编辑:

将所有相关属性分组为逻辑类。在FaceBookUser中定义所有这些类。不必在类中的

Builder
包含
FaceBookUser
中再次添加所有这些成员变量
Builder

为简单起见,我添加了两个类:UserBasicInfo和ContactInfo。现在,使用其他属性将这个FaceBookUser类爆炸

NewsFeedMessagesFriendsAlbumsEventsGamesPagesAds

等等

如果您在

Builder
和中都复制了所有这些属性
FaceBookUser
,则代码将变得难以管理。相反,使用的成分
FaceBookUser
FaceBookUserBuilder
本身,你可以简单的构建过程。

添加以上属性后,您将

FaceBookUser
像往常一样逐步进行构建。

它将是这样的:

FaceBookUser fbUser3 = new FaceBookUser.FaceBookUserBuilder("Ravindra").       setUserBasicInfo(info).       setNewsFeed(newsFeed).       setMessages(messages).       setFriends(friends).       setAlbums(albums).       setEvents(events).       setGames(games).       setAds(ads).build();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号