建造者模式

什么是建造者模式

将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示

UML图

在这里插入图片描述
由Director类定义建造顺序,在ConcreteBuilder类中进行对象的细节建造(当然ConcreteBuilder类需要知道用户对对象的要求),通过多态增加代码的灵活性。
工厂方法等相似的设计模式都是直接返回一个完整的对象,如果对对象的要求更加细致使用建造者模式是一个很好的选择。

本质

分离整体构建和局部构建

小练习

对于txt文件,xml文件的构建是类似的,都需要文件头,文件体以及文件尾。
使用建造者模式实现对于不同类型的文件的输出。
在这里插入图片描述
Director类

public class FileBuildDirector {
	private static FileBuilder builder;
	public static void buildeFile(FileBuilder builderr){
		builder=builderr;
		builder.buildHead();
		builder.buildBody();
		builder.buildLast();
	}
	public static FileAbstract getResult(){
		return builder.getResult();
	}
}

Builder类


public abstract  class FileBuilder {
	protected String firmId;
	protected String user;
	
	public FileBuilder(String firmId, String user) {
		this.firmId = firmId;
		this.user = user;
	}
	public abstract void buildHead();
	public abstract void buildBody();
	public abstract void buildLast();
	public abstract FileAbstract getResult();
}

TxtBuilder类


public class TxtBuilder extends FileBuilder{
	private TxtFile file=new TxtFile();
	
	public TxtBuilder(String firmId, String user) {
		super(firmId, user);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		file.addHead(firmId);
	}

	@Override
	public void buildBody() {
		// TODO Auto-generated method stub
		file.addBody();
	}

	@Override
	public void buildLast() {
		// TODO Auto-generated method stub
		file.addLast(user);
	}

	@Override
	public FileAbstract getResult() {
		// TODO Auto-generated method stub
		return file;
	}

}

XmlBuilder类


public class XmlBuilder extends FileBuilder{
	private String tableId;
	private XmlFile file=new XmlFile(tableId);
 	@Override
	public void buildHead() {
		// TODO Auto-generated method stub
		file.addHead(firmId);
	}

	@Override
	public void buildBody() {
		// TODO Auto-generated method stub
		file.addBody();
	}

	@Override
	public void buildLast() {
		// TODO Auto-generated method stub
		file.addLast(user);
	}

	@Override
	public FileAbstract getResult() {
		// TODO Auto-generated method stub
		return file;
	}

	public XmlBuilder(String firmId, String user,String id) {
		super(firmId, user);
		tableId=id;
	}
	
}

AbstractProduct类



public abstract class FileAbstract {
	protected String head;
	protected String body;
	protected String last;
	public abstract void addHead(String firmId);
	public abstract void addBody();
	public abstract void addLast(String user);
	public void show(){
		System.out.println(head);
		System.out.println(body);
		System.out.println(last);
	}
}


TxtFile类

import java.util.Date;


public class TxtFile extends FileAbstract{

	public void addHead(String firmId){
		head=firmId+","+new Date();
	}
	public void addBody(){
		body="txt文件";
	}
	public void addLast(String user){
		last=user;
	}

}	

XmlFile类

import java.util.Date;


public class XmlFile extends FileAbstract{
	private String tableId;
	
	public XmlFile(String id) {
		super();
		tableId=id;
	}
	public void addHead(String firmId){
		head=firmId+","+new Date();
	}
	public void addBody(){
		body=tableId+" XML文件";
	}
	public void addLast(String user){
		last=user;
	}
}

test类


public class test {
	
	public static void main(String[] args) {
	TxtBuilder txtBuilder=new TxtBuilder("1","liuenzhen");
	FileBuildDirector.buildeFile(txtBuilder);
	FileBuildDirector.getResult().show();;
	XmlBuilder xmlBuilder=new XmlBuilder("1","liuenzhen","1");
	FileBuildDirector.buildeFile(txtBuilder);
	FileBuildDirector.getResult().show();;
}
}

如果还需要增加其他类型文件的输出,只需要增添Builder类的具体实现,以及具体的文件类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值