建造者模式

建造者模式

定义:

      Separate the construction of a complex object from its representation so that the same construction process can create different representations. java

        将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。设计模式

通用类图:

通用代码:

产品的抽象类:
ui

package Builder;

import java.util.ArrayList;

public abstract class AbstractProduct {
	
	//记录执行顺序
	private ArrayList<String> part = new ArrayList<String>();
	
	public abstract void doSomething();
	
	public abstract void doOtherthing();
	
	//final,子类不可重写
	final public void executive(){
		for(int i=0;i<this.part.size();i++){
			String actionName = this.part.get(i);
			if(actionName.equals("doSomething")){
				this.doSomething();
			}
			else if(actionName.equals("doOtherthing")){
				this.doOtherthing();
			}
		}
	}
	
	//final,子类不可重写
	final public void setPart(ArrayList<String> part){
		this.part = part;
	}
}

产品的实现类:this

package Builder;

public class Product extends AbstractProduct{

        //子类具体描述步骤
	public void doSomething(){ 
		System.out.println("will do something...");
	}
	
	public void doOtherthing() {
		System.out.println("Something has done.Otherthing will be done...");
	}
}

建造者抽象类:
spa

package Builder;

import java.util.ArrayList;

public abstract class Builder {
	
	//设置产品的不一样部分,以得到不一样的产品 
	public abstract void setPart(ArrayList<String> part);
	
	//建造产品 
	public abstract Product buildProduct(); 
}

建造者实现类:
设计

package Builder;

import java.util.ArrayList;

public class ConcreteProduct extends Builder{
	
	private Product product = new Product();
	
	public void setPart(ArrayList<String> part) {
		this.product.setPart(part);
	}
	
	public Product buildProduct() {
		return this.product;
	}


}

导演类:
code

package Builder;

import java.util.ArrayList;

//对不一样产品的生产顺序再封装,对高层屏蔽细节
public class Director {
	private  ArrayList<String> part = new ArrayList<String>();
	private  Builder builder = new ConcreteProduct();
	
	public Product getAProduct() {
		this.part.clear();
		this.part.add("doSomething");
		this.part.add("doOtherthing");
		builder.setPart(part);
		return builder.buildProduct();
	}
}

客户端:对象

package Builder;

public class Client {
	public static void main(String[] args) {
		Director director = new Director();
		System.out.println("将产生10个产品");
		for(int i=1;i<11;i++){
			System.out.println("第" + i + "个产品");
			director.getAProduct().executive();
			System.out.println();
		}
	}
}

说明:get

    1. Product 产品类:一般是实现了模板方法模式,也就是有模板方法和基本方法;产品

    2. Builder 抽象建造者:规范产品的组建,通常是由子类实现。

    3. ConcreteBuilder 具体建造者实现抽象类定义的全部方法,而且返回一个组件好的对象。

    4. Director 导演:负责安排已有模块的顺序,而后告诉Builder开始建造;

建造者模式优势:

    1. 良好的封装性

    2. 建造者独立,内容可扩展

    3. 便于控制细节风险

建造者模式使用场景:

    1.相同的方法,不一样的执行顺序,产生不一样的结果

    2.多个部件均可以装配到一个对象中,产生的结果又不相同

    3.产品类很是复杂


参考资料:

《设计模式之禅》        秦小波著        第十一章建造者模式

百度百科                                            建造者模式

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息