一、概念
建造者模式,将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。
二、类图及基本代码
//产品类
public class Product {
List<String> parts=new ArrayList<>();
/*
* 添加部件
*/
public void Add(String part){
parts.add(part);
}
/*
* 显示部件
*/
public void Show(){
System.out.println("\n产品 创建----");
for (String string : parts) {
System.out.println(string);
}
}
}
/*
* 构建者抽象类
*/
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product getProduct();
}
/*
* 具体建造者1
*/
public class ConcreteBuilder1 extends Builder {
private Product product=new Product();
@Override
public void BuildPartA() {
product.Add("部件A");
}
@Override
public void BuildPartB() {
product.Add("部件B");
}
@Override
public Product getProduct() {
return product;
}
}
//具体构建者2
public class ConcreteBuilder2 extends Builder{
private Product product=new Product();
@Override
public void BuildPartA() {
product.Add("部件x");
}
@Override
public void BuildPartB() {
product.Add("部件y");
}
@Override
public Product getProduct() {
return product;
}
}
/*
* 指挥者:提供一个方法,使用构建者Builder构建对象
*/
public class Director {
public void Construct(Builder builder){
builder.BuildPartA();
builder.BuildPartB();
}
}
/*
* 建造者模式:创建一些复杂的对象,这些对象的内部构建间的构造顺序通常是稳定的,
* 同样的构造过程产生不一样的表现
*/
public class Show {
public static void main(String[] args) {
Director director=new Director();
Builder builder1=new ConcreteBuilder1();
Builder builder2=new ConcreteBuilder2();
director.Construct(builder1);
Product p1=builder1.getProduct();
p1.Show();
director.Construct(builder2);
Product p2=builder2.getProduct();
p2.Show();
/*
* 产品 创建----
* 部件A
* 部件B
* 产品 创建----
* 部件x
* 部件y
*/
}
}
三、总结
1、建造者模式是创建复杂对象Product时的算法应该独立于该对象的组成部分以及它们的装配方式时使用的方式。在基本代码中,复杂对象Product包含两个部件且装配时的方式一致,创建复杂对象的过程一样,但产生不同的表现。
/*
* 产品 创建—-
* 部件A
* 部件B
*
* 产品 创建—-
* 部件x
* 部件y
*/
2、使用时机。用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常是面临着复杂的变化。
As fruit needs not only sunshine but cold nights and chilling showers to ripen it,so character needs not only joy but trial and diffculty to mellow it.