建造者模式

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

如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

建造者模式:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的。

Product类

package builder;

import java.util.ArrayList;
import java.util.List;
/**
 * 具体产品,由多个部件组成
 * @author 煞笔
 *
 */
public class Product {
    List<String> parts = new ArrayList<String>();
    public void add(String part){
        parts.add(part);
    }
    public void show(){
        System.out.println("产品创建开始。。。");
        for(String part:parts){
            System.out.println(part);
        }
    }
}

Builder类

package builder;
/**
 * 抽象建造者,确定产品由两个部件PartA,PartB组成
 * @author 煞笔
 *
 */
public abstract class Builder {
    public abstract void addPartA();
    
    public abstract void addPartB();
    
    public abstract Product getResult();
}

ConcreteBuilderA类

package builder;
/**
 * 具体建造者A
 * @author 煞笔
 *
 */
public class ConcreteBuilderA extends Builder {
    private Product product = new Product();

    @Override
    public void addPartA() {
        product.add("部件A");
    }

    @Override
    public void addPartB() {
        product.add("部件B");
    }

    @Override
    public Product getResult() {
        return product;
    }

}

ConcreteBuilderB类

package builder;
/**
 * 具体建造者B
 * @author 煞笔
 *
 */
public class ConcreteBuilderB extends Builder {
    
    private Product product = new Product();
    
    @Override
    public void addPartA() {
        product.add("部件X");
    }

    @Override
    public void addPartB() {
        product.add("部件Y");
    }

    @Override
    public Product getResult() {
        return product;
    }

}

Director类

package builder;
/**
 * 指挥者,确定部件建造过程
 * @author 煞笔
 *
 */
public class Director {
    public void Constrct(Builder builder){
        /*System.out.println("建造顺序1");
        builder.addPartB();
        builder.addPartA();*/
        System.out.println("建造顺序2");
        builder.addPartA();
        builder.addPartB();
    }
}

Business类

package builder;

public class Business {

    public static void main(String[] args) {
        Director director = new Director();
        Builder builderA = new ConcreteBuilderA();
        Builder builderB = new ConcreteBuilderB();
        director.Constrct(builderA);
        Product p1 = builderA.getResult();
        p1.show();
        
        director.Constrct(builderB);
        Product p2 = builderB.getResult();
        p2.show();
    }

}
原文地址:https://www.cnblogs.com/ccgjava/p/7077618.html