java设计模式创建篇------建造者模式

核心思想

将对象的构建与其表示分离,这样通过相同的构建过程可以创建不同的表示。

具体实现

将构建与表示分离,分为产品,建造,生产三个部分。

构建

生产模板

首先我们需要一个生产的模板,这是我们需要的最终产品的抽象,我们以一个抽象类表示,我们的最终产品是这个类的继承实现。

public abstract class Model {
	private ArrayList<String> queue = new ArrayList<String>();
	protected abstract void deal1();//不同的产品有不同的处理
	protected abstract void deal2();//不同的产品有不同的处理
	//根据处理顺序进行实际生产
	public void run() {
		for(int i=0;i<queue.size();i++){
			String act = queue.get(i);
			if(act.equals("1")){
				deal1(); //处理1
			}else if(act.equals("2")){
				deal2(); //处理2
			}
		}
	}
	//设置处理顺序
	public void setQueue(ArrayList<String> queue){
		this.queue = queue;
	}
}

抽象生产线

除了产品的模板外,我们还需要一个通用的组装生产线。对不同的产品由不同的生产线生产,但是它们拥有相同的生产线抽象。

public abstract class Builder {
	//根据需求设置生产顺序
	public abstract void setQueue(ArrayList<String> queue);
	//按顺序完成生产获取成品
	public abstract Model getModel();
}

表示

具体产品

具体的产品表示,假设有两种产品。

public class Product1 extends Model {
	protected void deal1() {
		System.out.println("Product1的deal1是这样处理的");
	}
	protected void deal2() {
		System.out.println("Product1的deal2是这样处理的");
	}
}

public class Product2 extends Model {
	protected void deal1() {
		System.out.println("Product2的deal1是这样处理的");
	}
	protected void deal2() {
		System.out.println("Product2的deal2是这样处理的");
	}
}

具体生产线

再根据不同的产品需要生成具体的两条生产线。

//产品1的生产线
public class Product1Builder extends Builder {
	private Product1 p1= new Product1();
	public Model getModel() {
		return p1;
	}
	public void setQueue(ArrayList<String> queue) {
		p1.setQueue(queue);
	}
}
//产品2的生产线
public class Product2Builder extends Builder {
	private Product2 p2= new Product2();
	public Model getModel() {
		return p2;
	}
	public void setQueue(ArrayList<String> queue) {
		p2.setQueue(queue);
	}
}

建造过程

接下来就是具体的生产过程了,我们将其封装到一个类中方便调用。

public class Factory{
	private ArrayList<String> queue = new ArrayList<String>();
	private Product1Builder p1=new Product1Builder();
	private Product2Builder p2=new Product2Builder();
	
	//获得第一类产品
	public Product1 getProduct1 (){
		queue.clear();
		//设置的执行顺序
		queue.add("1");
		queue.add("2");
		p1.setQueue(queue);
		Product1 product1 = (Product1)p1.getModel();
		return product1 ;
	}
    //获得第二类产品
	public Product2 getProduct2(){
		queue.clear();
		//设置的执行顺序
		queue.add("2");
		queue.add("1");
		p2.setQueue(queue);
		Product2 product2 = (Product2)p2.getModel();
		return product2 ;
	}
}

简单的体验一下

public static void main(String[] args) {
	Factory factory= new Factory ();
	Product1 product1 = factory.getProduct1();
	product1.run();
	Product2 product2 = factory.getProduct2(); 
	product2.run();
}

特点

与工厂模式与抽象工厂相似,这一模式具有很好的封装性,保证我们可以在不知道目标内部细节的情况下建立产品。由于每个具体的生产建造类之间是相互独立的,所以具有很好的外部扩展性,各个模块之间具有独立性,相互之间不会产生影响。除此之外,建造者模式相较于工厂方法突出强调了产品类中函数调用的顺序,这是其比较重要的特点。

猜你喜欢

转载自blog.csdn.net/sinat_36945592/article/details/86705234