设计模式-建造者模式
建造者模式,又叫构建者模式,构建器模式等等,定义这里我就不赘述了,网上书上都很多,可以很方便找来看。我为什么不说一遍呢,第一,觉得大部分的定义都描述的不是很易懂,第二,我自己目前还没达到能够下定义的水平。
先来看看代码,然后再给出我的理解。
public class Article { private String title;
private String content;
private String sign;
private Date time; //省略了getter,setter,toString }
public interface ArticleBuilder { void setTitle(String title); void buildContent(String title); void setTime(Date date); Article getResultArticle();
}
public class ConcreteArticleBuilder implements ArticleBuilder { private Article article = new Article();
@Override
public void setTitle(String title) { article.setTitle(title);
} @Override
public void buildContent(String content) { article.setContent(content);
} @Override
public void setTime(Date date) { article.setTime(date);
} @Override
public Article getResultArticle() { return article;
}
}
public class ArticleWriter { private ArticleBuilder builder; public ArticleWriter(ArticleBuilder builder) { this.builder = builder;
} public Article construct() { builder.setTitle("");
builder.buildContent("");
builder.setTime(new Date());
return builder.getResultArticle();
}
}
public class BuilderPatternDemo { public static void main(String[] args) { ArticleBuilder carBuilder = new ConcreteArticleBuilder();
ArticleWriter cd = new ArticleWriter(carBuilder);
Article car = cd.construct();
System.out.println(car);
}
}
建造者模式的核心类是Builder接口和具体的Builder实现类,比如StringBuilder,我们在使用的过程中,几乎忽略了Director角色和抽象Builder(Appendable)的存在,而Director角色也通常是业务逻辑中的角色,对于抽象程度不高的业务代码中,没有什么影响。对于一个架构良好的设计中,各角色的存在还是很有必要的。
建造者模式和工厂模式的区别在于,工厂模式使用类似于流水线的方式目的在于生产一批对象,而建造者模式核心的关注点是如何创建一个对象,以及创建过程中的每个细节。工厂模式的适用于批量创建多个对象的场景,建造者模式适用创建单个复杂的不同对象,用建造者创建的多个对象之间的差异较大。
再用另外一个比喻,一个是工厂,生产出来的是千篇一律的产品,另外一个是指挥家,创造的音乐是有个性的,几乎是唯一的音乐。
再比如,创作一幅画,这个也可以用建造者模式
建造者模式在JDK中身影:StringBuilder
代码地址:https://github.com/angelala00/learn/tree/master/src/main/java/cn/jc/designpattern/builderpattern
下面再附上实现《设计模式》中的Builder模式的代码:
评论
发表评论