设计模式之创建型模式之建造者模式

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

用大白话讲就是:一个完整的java bean对象,给它的各个属性都附上值,正常我们是这样写的new一个对象,然后给它各种set值,使用了建造者模式后,我们将set的工作交由一个builder类来完成,该类有各种赋值的方法,并返回一个完整的对象,而这个builder类交给一个指挥者类(Dirextor)来调用builder类的方法完成,可以按照我们的需要的不同的组合来写指挥者类,得到不同组合的一个对象.

我们不需要关系这个对象是怎么组装的,直接调用接口就能得到完整对象

包含角色:

Builder:抽象的建造者,一个抽象接口或抽象类,规范了产品哪些部件要创建,并不参与具体的创建过程,将交由其子类来具体创建

ConcreteBulider:具体建造者,抽象Builder的具体实现,实现builder抽象的方法,返回一个组建好的对象

Dirextor:指挥者,调用ConcreteBulider来负责对象的具体组装流程

Product:产品类

优点: 1、建造者独立,易扩展。 2、便于控制细节风险。
缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。
使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。
注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

就拿我们要字组装一台电脑:电脑有 cpu,显卡,硬盘,固态硬盘等,也不是所有人都要给这些装上的,有些人为了性能好些会给装上个固态硬盘,也有些会不需要固态硬盘,这样的话我们的电脑组装者按照不需求配置不同的电脑(电脑组装者就当于dirextor)

代码实现:

扫描二维码关注公众号,回复: 2732422 查看本文章

Product:产品类

public class Computer {
	private String cpu;
	private String xk;
	private String yp;
	private String ktyp;
	public String getCpu() {
		return cpu;
	}
	public void setCpu(String cpu) {
		this.cpu = cpu;
	}
	public String getXk() {
		return xk;
	}
	public void setXk(String xk) {
		this.xk = xk;
	}
	public String getYp() {
		return yp;
	}
	public void setYp(String yp) {
		this.yp = yp;
	}
	public String getKtyp() {
		return ktyp;
	}
	public void setKtyp(String ktyp) {
		this.ktyp = ktyp;
	}
	@Override
	public String toString() {
		return "Computer [cpu=" + cpu + ", xk=" + xk + ", yp=" + yp + ", ktyp=" + ktyp + "]";
	}
}

Builder:抽象建造者

public interface Builder {
	public void assembleCpu();
	public void assembleXk();
	public void assembleYp();
	public void assembleKtyp();
	public Computer creatComputer();
}

ConcreteBulider:具体建造者

public class ComputerBuilder implements Builder {
	Computer computer=new Computer();
	public void assembleCpu() {
		computer.setCpu("组装cpu");
	}
	public void assembleXk() {
		computer.setXk("组装显卡");
	}
	public void assembleYp() {
		computer.setYp("组装硬盘");
	}
	public void assembleKtyp() {
		computer.setKtyp("组装固态硬盘");
	}
	public Computer creatComputer(){
		return computer;
	}
}

Dirextor:指挥者

public class ComputerDirextor {
	public Builder assembleComputer(Builder builder){
		builder.assembleCpu();
		builder.assembleKtyp();
		builder.assembleKtyp();
		return builder;
	}
}

测试

public static void main(String[] args) {
		ComputerDirextor cd=new ComputerDirextor();
		Builder builder = cd.assembleComputer(new ComputerBuilder());
		Computer computer = builder.creatComputer();
		System.out.println(computer);
	}
结果
Computer [cpu=组装cpu, xk=null, yp=null, ktyp=组装固态硬盘]

要组装什么样的电脑就看指挥者怎么去组装咯.......


猜你喜欢

转载自blog.csdn.net/u010943801/article/details/79730335