您的位置:首页 > 编程语言 > Java开发

java构造者模式的使用

2016-06-29 18:16 267 查看
一.Builder模式的定义:

      本文部分内容引用http://www.cnblogs.com/java-my-life/archive/2012/04/07/2433939.html

      Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。Builder构建模式主要是为了将构建复杂对象的过程和它的部件解耦.

Builder模式结构如下:

使用场景

  假设有一个电子杂志系统,定期地向用户的电子邮件信箱发送电子杂志。用户可以通过网页订阅电子杂志,也可以通过网页结束订阅。当客户开始订阅时,系统发送一个电子邮件表示欢迎,当客户结束订阅时,系统发送一个电子邮件表示欢送。本例子就是这个系统负责发送“欢迎”和“欢送”邮件的模块。

  在本例中,产品类就是发给某个客户的“欢迎”和“欢送”邮件,如下图所示。

  虽然在这个例子里面各个产品类均有一个共同的接口,但这仅仅是本例子特有的,并不代表建造模式的特点。建造模式可以应用到具有完全不同接口的产品类上。大多数情况下是不知道最终构建出来的产品是什么样的,所以在标准的建造模式里面,一般是不需要对产品定义抽象接口的,因为最终构造的产品千差万别,给这些产品定义公共接口几乎是没有意义的。

  下图所示就是这个系统的类图。

  

  这个系统含有客户端(Client)、导演者(Director)、抽象建造者(Builder)、具体建造者(WelcomeBuilder和GoodbyeBuilder)、产品(WelcomeMessage和GoodbyeMessage)等角色。

构造者模式的标准结构就是上述所示,但是在具体的场景结构可能不同,但是其核心思想都是一致的:将复杂对象的构建与部件进行分离,例如在构建一个对象时,我们需要从外部传入很多参数来进行创建,但是有些参数在某些情况下不需要,我们总不能进行构造函数进行多次重载(那样构造方法太多很难区分),所以我们就需要利用构造者模式,例子如下

package com.letv.tv.model;

import android.content.Context;

import com.letv.tv.R;
import com.letv.tv.constants.ChannelConstants;
import com.letv.tv.constants.StreamCodeConstants;
import com.letv.tv.statistic.model.external.BaseExternalPo;
import com.letv.tv.utils.PageSwitchUtils;

/**
* Created by xianggengping on 15-7-13.
*/
public class ContentBlockModel {
private Context context;
private String fromPage;
private String channelId;
private String albumId;
private String name;
private String videoId;
private String categoryId;
private String liveId;
private int dataType;
private int subjectType;
private String subjectId;
private int browserType;
private int openType;
private String url;
private String labelIdToPlay;
private String defautlStreamCode;
private BaseExternalPo.ResourceEnum resourceEnum;
private PageSwitchUtils.GoToFragEnum goToFragEnum;
private String cinemaId;
private String blockId;
private Integer tvCopyright;
private Integer src;
private String website;
private String webPlayUrl;
private String actorStartId;
private String containerId;

public static Builder getBuilder() {
return new Builder();
}

public ContentBlockModel(Context context, int dataType, int subjectType,
int browserType, int openType, String fromPage, String channelId,
String albumId, String name, String videoId, String categoryId,
String liveId, String subjectId, String url, String labelIdToPlay,
String defautlStreamCode, BaseExternalPo.ResourceEnum resourceEnum,
PageSwitchUtils.GoToFragEnum goToFragEnum, String cinemaId,
String blockId, Integer tvCopyright, Integer src,
String website, String webPlayUrl, String actorStartId, String containerId) {
this.context = context;
this.dataType = dataType;
this.subjectType = subjectType;
this.browserType = browserType;
this.openType = openType;
this.fromPage = fromPage;
this.channelId = channelId;
this.albumId = albumId;
this.name = name;
this.videoId = videoId;
this.categoryId = categoryId;
this.liveId = liveId;
this.subjectId = subjectId;
this.url = url;
this.labelIdToPlay = labelIdToPlay;
this.defautlStreamCode = defautlStreamCode;
this.resourceEnum = resourceEnum;
this.goToFragEnum = goToFragEnum;
this.cinemaId = cinemaId;
this.blockId = blockId;
this.tvCopyright = tvCopyright;
this.src = src;
this.website = website;
this.webPlayUrl = webPlayUrl;
this.actorStartId = actorStartId;
this.containerId = containerId;
}

public String getFromPage() {
return fromPage;
}

public void setFromPage(String fromPage) {
this.fromPage = fromPage;
}

public String getChannelId() {
return channelId;
}

public void setChannelId(String channelId) {
this.channelId = channelId;
}

public String getAlbumId() {
return albumId;
}

public void setAlbumId(String albumId) {
this.albumId = albumId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getVideoId() {
return videoId;
}

public void setVideoId(String videoId) {
this.videoId = videoId;
}

public String getLiveId() {
return liveId;
}

public void setLiveId(String liveId) {
this.liveId = liveId;
}

public int getDataType() {
return dataType;
}

public void setDataType(int dataType) {
this.dataType = dataType;
}

public String getCategoryId() {
return categoryId;
}

public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}

public int getSubjectType() {
return subjectType;
}

public void setSubjectType(int subjectType) {
this.subjectType = subjectType;
}

public String getSubjectId() {
return subjectId;
}

public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}

public int getBrowserType() {
return browserType;
}

public void setBrowserType(int browserType) {
this.browserType = browserType;
}

public String getLabelIdToPlay() {
return labelIdToPlay;
}

public void setLabelIdToPlay(String labelIdToPlay) {
this.labelIdToPlay = labelIdToPlay;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getDefautlStreamCode() {
return def
4000
autlStreamCode;
}

public void setDefautlStreamCode(String defautlStreamCode) {
this.defautlStreamCode = defautlStreamCode;
}

public BaseExternalPo.ResourceEnum getResourceEnum() {
return resourceEnum;
}

public void setResourceEnum(BaseExternalPo.ResourceEnum resourceEnum) {
this.resourceEnum = resourceEnum;
}

public PageSwitchUtils.GoToFragEnum getGoToFragEnum() {
return goToFragEnum;
}

public void setGoToFragEnum(PageSwitchUtils.GoToFragEnum goToFragEnum) {
this.goToFragEnum = goToFragEnum;
}

public int getOpenType() {
return openType;
}

public void setOpenType(int openType) {
this.openType = openType;
}

public String getCinemaId() {
return cinemaId;
}

public void setCinemaId(String cinemaId) {
this.cinemaId = cinemaId;
}

public String getBlockId() {
return blockId;
}

public void setBlockId(String blockId) {
this.blockId = blockId;
}

public Integer getTvCopyright() {
return tvCopyright;
}

public void setTvCopyright(Integer tvCopyright) {
this.tvCopyright = tvCopyright;
}

public Integer getSrc() {
return src;
}

public void setSrc(Integer src) {
this.src = src;
}

public String getWebPlayUrl() {
return webPlayUrl;
}

public void setWebPlayUrl(String webPlayUrl) {
this.webPlayUrl = webPlayUrl;
}

public String getWebsite() {
return website;
}

public void setWebsite(String website) {
this.website = website;
}

public String getActorStartId() {
return actorStartId;
}

public void setActorStartId(String actorStartId) {
this.actorStartId = actorStartId;
}

public String getContainerId() {
return containerId;
}

public void setContainerId(String containerId) {
this.containerId = containerId;
}

public static class Builder {
private int dataType;
private int subjectType;
private int browserType;
private int openType;
private String fromPage;
private String channelId;
private String albumId;
private String name;
private String videoId;
private String categoryId;
private String liveId;
private String subjectId;
private String url;
private String labelIdToPlay;
private String defaultStreamCode;
private BaseExternalPo.ResourceEnum resourceEnum;
private PageSwitchUtils.GoToFragEnum goToFragEnum;
private String cinemaId;
private String blockId;
private Integer tvCopyright;
private Integer src;
private String website;
private String webPlayUrl;
private String actorStartId;
private String containerId;

public ContentBlockModel build(Context context) {
return new ContentBlockModel(context, dataType, subjectType,
browserType, openType, fromPage, channelId, albumId, name,
videoId, categoryId, liveId, subjectId, url, labelIdToPlay,
defaultStreamCode, resourceEnum, goToFragEnum, cinemaId,
blockId, tvCopyright, src, website, webPlayUrl, actorStartId, containerId);
}

public Builder fromPage(String frompage) {
this.fromPage = frompage;
return this;
}

public Builder channelId(String channelId) {
this.channelId = channelId;
return this;
}

public Builder albumId(String albumId) {
this.albumId = albumId;
return this;
}

public Builder name(String name) {
this.name = name;
return this;
}

public Builder videoId(String videoId) {
this.videoId = videoId;
return this;
}

public Builder categoryId(String categoryId) {
this.categoryId = categoryId;
return this;
}

public Builder liveId(String liveId) {
this.liveId = liveId;
return this;
}

public Builder dataType(int dataType) {
this.dataType = dataType;
return this;
}

public Builder subjectType(int subjectType) {
this.subjectType = subjectType;
return this;
}

public Builder subjectId(String subjectId) {
this.subjectId = subjectId;
return this;
}

public Builder browserType(int browserType) {
this.browserType = browserType;
return this;
}

public Builder openType(int openType) {
this.openType = openType;
return this;
}

public Builder url(String url) {
this.url = url;
return this;
}

public Builder labelIdToPlay(String labelIdToPlay) {
this.labelIdToPlay = labelIdToPlay;
return this;
}

public Builder defaultStreamCode(String defaultStreamCode) {
this.defaultStreamCode = defaultStreamCode;
return this;
}

public Builder resourceEnum(BaseExternalPo.ResourceEnum resourceEnum) {
this.resourceEnum = resourceEnum;
return this;
}

public Builder goToFragEnum(PageSwitchUtils.GoToFragEnum goToFragEnum) {
this.defaultStreamCode = defaultStreamCode;
return this;
}

public Builder cinemaId(String cinemaId) {
this.cinemaId = cinemaId;
return this;
}

public Builder blockId(String blockId) {
this.blockId = blockId;
return this;
}

public Builder tvCopyright(Integer tvCopyright) {
this.tvCopyright = tvCopyright;
return this;
}

public Builder src(Integer src) {
this.src = src;
return this;
}

public Builder website(String website) {
this.website = website;
return this;
}

public Builder webPlayUrl(String webPlayUrl) {
this.webPlayUrl = webPlayUrl;
return this;
}

public Builder actorStartId(String actorStartId) {
this.actorStartId = actorStartId;
return this;
}

public Builder containerId(String containerId) {
this.containerId = containerId;
return this;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息