概述

建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。

本质

分离了对象子组件的单独构造(由Builder来单独负责)和装配(由Director来负责)从而构造出复杂的对象,从而实现了构造和装配的解耦,不同构造器相同装备装配也可以做出不同的对象;相同构造器不同装配顺序也可以做好受不同的对象,也就是实现了构建算法和装配算法的解耦,实现了更好的复用。

UML类图

角色介绍

名字 说明
Builder 定义了产品的接口
Director 定义实际构造产品的类
TextBuilder Builder接口的实现类(此处的产品指的是纯文本类)
HTMLBuilder Builder接口的实现类(此处的产品指的是HTML文本类)
Client 测试程序行为的类

Builder模式简单实现

Builer接口

    public interface Builder {
public abstract void makeTitle(String title);
public abstract void makeString(String str);
public abstract void makeItems(String[] items);
public abstract void close();
}

Director构造类

    public class Director {
private Builder builder;
public Director(Builder builder){
this.builder=builder;
}
/*
* 具体进行文档创建的方法,包含创建文档的若干步骤
*/
public void construct(){
builder.makeTitle("标题");
builder.makeString("我是正文");
builder.makeItems(new String[]{
"晚上好","早上好"
});
builder.close();
}
}

TextBuilderiy纯文本实现类

    public class TextBulider implements Builder{
private StringBuffer buffer=new StringBuffer();
@Override
public void makeTitle(String title) {
buffer.append("*===========================*");
buffer.append("["+title+"]");
buffer.append("\n");
} @Override
public void makeString(String str) {
buffer.append("-->:"+str+"\n");
buffer.append("\n");
} @Override
public void makeItems(String[] items) {
for(int i=0;i<items.length;i++){
buffer.append(" ."+items[i]+"\n");
}
buffer.append("\n");
} @Override
public void close() {
buffer.append("============================\n");
}
public String getResult(){
return buffer.toString();
}
}

HTMLBuilder网页文本实现类

    public class HTMLBuilder implements Builder{
private StringBuffer buffer=new StringBuffer();
@Override
public void makeTitle(String title) {
buffer.append("<html><head><title>"+title+"</title>");
} @Override
public void makeString(String str) {
buffer.append("<p>"+str+"</p>");
} @Override
public void makeItems(String[] items) {
buffer.append("<ul>");
for(int i=0;i<items.length;i++){
buffer.append("<li>"+items[i]+"</li>");
}
buffer.append("</ul>");
} @Override
public void close() {
buffer.append("</body></html>");
}
public String getResult(){
return buffer.toString();
}
}

Client测试类

 public class Client {
public static void main(String[] args) {
// TextBulider builder=new TextBulider();
// Director director=new Director(builder);
// director.construct();
// String result=builder.getResult();
// System.out.println(result); HTMLBuilder builder =new HTMLBuilder();
Director director=new Director(builder);
director.construct();
String result=builder.getResult();
System.out.println(result);
}
}

最新文章

  1. HTML5 oninput实时监听输入框值变化的完美方案
  2. zpf 路由功能
  3. linux应用程序开发-文件编程-系统调用方式
  4. cas单点注销失败Error Sending message to url endpoint
  5. VS C++ 从一个窗口创建另一个窗口
  6. *[codility]AscendingPaths
  7. MDI端口和MDIX端口是什么? 又有什么作用?
  8. DirectX 初始化DirectX(手写和红龙书里面的方式)
  9. nyoj 528 找球号(三)(哈希)
  10. excel==&gt;csv==via phpmyadmin (edit php.ini &amp; my.ini)==&gt; MySQL Database
  11. DelayQueue使用示例之KTV包厢记时
  12. C# 构造器总结
  13. 设计模式之过滤器模式——Java语言描述
  14. Tools - 使用Doxygen和Graphviz分析代码
  15. wireshark实战之局域网抓包分析
  16. 双启动:安装Windows 7 和 CentOS 7 双系统教程
  17. 十六、Condition等待通知
  18. VC++使用socket进行TCP、UDP通信实例总结
  19. Unity商店下载的文件保存路径?
  20. 451. Swap Nodes in Pairs【LintCode java】

热门文章

  1. SpannableStringBuilder实现图文混排
  2. 百度大脑UNIT3.0详解之知识图谱与对话
  3. luoguP4449 于神之怒加强版
  4. ReactNative: 使用网页组件WebView组件
  5. Prometheus学习系列(八)之Prometheus API说明
  6. WPF之行为
  7. MySQL 重置Mysql root用户账号密码
  8. 教程视频、项目源码、全部干货【微信小程序、React Native、Java、iOS、数据结构】
  9. 使用PowerShell实现服务器常用软件的无人值守安装
  10. ElasticSearch: SearchContextMissingException[No search context found for id [173690]]