您的位置:首页 > 其它

建造者模式

2016-01-28 11:04 337 查看
这篇博客介绍下建造者模式(Builder模式)。

建筑者模式是一种对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

建造者模式中的角色:

1.Director导演类(负责用不同的build,做相同的行为)

2.Builder抽象接口(定义了建筑的通用行为)

3.Builder建筑者类(建筑内容不相同的实体的行为类,一般有多个)

Entity:

/*
* 这个实体服务于list和detail
*/
public class News {
private int id;//都需要
private String title;//都需要
private String author;//都需要
private String updateTime;//都需要
private String content;//detail需要
private String bigImage;//detail需要
private String smallImage;//list需要
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getBigImage() {
return bigImage;
}
public void setBigImage(String bigImage) {
this.bigImage = bigImage;
}
public String getSmallImage() {
return smallImage;
}
public void setSmallImage(String smallImage) {
this.smallImage = smallImage;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return id+","+title+","+author+","+updateTime+","+content+","+bigImage+","+smallImage;
}
}


Director:

public class NewsDirector {
public void setNewsBuild(NewsBuild build,String jsonString){
build.makeNews(jsonString);
}
}


Builder抽象接口:

/*
* 制作新闻的接口
*/
public interface NewsBuild {
public void makeNews(String jsonString);
public News getNews();
}


Builder的实例:

public class NewsDetailBuild implements NewsBuild {

private News news = new News();

@Override
public void makeNews(String jsonString) {
// TODO Auto-generated method stub
// 从jsonString从获取需要的属性,这边为了方便直接赋值
news.setId(0);
news.setTitle("123");
news.setAuthor("lbf");
news.setBigImage("http://big");
news.setUpdateTime("2014-1-1");
news.setContent("xxxxxxxxx");
}

@Override
public News getNews() {
// TODO Auto-generated method stub
return news;
}

}

public class NewsListBuild implements NewsBuild {

private News news = new News();

@Override
public void makeNews(String jsonString) {
// TODO Auto-generated method stub
//从jsonString从获取需要的属性,这边为了方便直接赋值
news.setId(0);
news.setTitle("123");
news.setAuthor("lbf");
news.setSmallImage("http://small");
news.setUpdateTime("2014-1-1");
}
@Override
public News getNews() {
// TODO Auto-generated method stub
return news;
}

}


主程序:

public class MainClass {
public static void main(String[] args) {
NewsDirector director = new NewsDirector();
NewsBuild listBuild = new NewsListBuild();
NewsBuild detailBuild = new NewsDetailBuild();
director.setNewsBuild(listBuild, "listString");
System.out.println(listBuild.getNews());
System.out.println("-----------------");
director.setNewsBuild(detailBuild, "detailString");
System.out.println(detailBuild.getNews());
}
}


建造者模式应用场景

对象的创建:Builder模式是为对象的创建而设计的模式

创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: