java设计模式04(建造者模式)

2019-04-09  本文已影响0人  刺风有道

建造者模式是一种对象创建型模式,它将客户端(调用者)与包含多个部件的复杂对象的创建过程分离,客户端无须知道对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。建造者模式关注如何一步一步地创建一个复杂对象,不同的建造者定义了不同的创建过程。

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

建造者模式的结构与实现:
1.Builder(抽象建造者):创建一个产品对象的各个部件指定抽象接口,且创建一个返回产品对象的方法。 Builder既可以时抽象类,也可以时接口。

public abstract class Builder {
    
    protected Product product=new Product();
    
    public abstract void buildHead();
    
    public abstract void buildHand();
    
    public abstract void buildFoot();
    
    public Product getResult() {
        return product;
    }

}

2.ConcreteBuilder(具体建造者):实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确所创建的复杂对象,还可以提供一个方法返回创建好的产品对象。

public class ConcreteBuilder extends Builder {

    @Override
    public void buildHead() {
         product.setHead("head");
    }

    @Override
    public void buildHand() {
        product.setHand("hand");
    }

    @Override
    public void buildFoot() {
        product.setFoot("foot");
    }

}

3.Product(产品):被构造的复杂对象,包含多个组成部件,具体建造者创建它的内部表示并定义它的装配过程。

public class Product {

    private String head;
    
    private String hand;
    
    private String foot;

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getHand() {
        return hand;
    }

    public void setHand(String hand) {
        this.hand = hand;
    }

    public String getFoot() {
        return foot;
    }

    public void setFoot(String foot) {
        this.foot = foot;
    }

    @Override
    public String toString() {
        return "Product [head=" + head + ", hand=" + hand + ", foot=" + foot + "]";
    }
    
}

4.Director(指挥者):负责安排复杂对象的建造次序,控制复杂对象的制造过程,指挥者与抽象建造者之间存在关联关系,可以在方法中调用建造者对象的部件构造和装配方法。

public class Director {

    private Builder builder;
    
    public Director(Builder builder) {
        this.builder=builder;
    }
    
    public Product construct() {
        builder.buildHead();
        builder.buildHand();
        builder.buildFoot();
        return builder.getResult();
    }
}

5.Test:

public class Test {

    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        System.out.println(product);
    }
}
上一篇下一篇

猜你喜欢

热点阅读