23种设计模式之Builder设计模式

java 同时被 2 个专栏收录
25 篇文章 0 订阅
2 篇文章 0 订阅

23种设计模式之Builder设计模式


概述

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

本质

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

UML类图

角色介绍

名字说明
Builder定义了产品的接口
Director定义实际构造产品的类
TextBuilderBuilder接口的实现类(此处的产品指的是纯文本类)
HTMLBuilderBuilder接口的实现类(此处的产品指的是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
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页

打赏作者

vcjmhg

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值