栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 建造者模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 建造者模式

参考程杰《大话设计模式》

建造者模式

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

比如构造一个小人,需要头,胳膊,腿,身体,但是不同的人,比如海绵宝宝和小黄人,虽然都由这4部分构成,但是每一部分却都不相同,此时应使用建造者模式。

解析

Builder:为创建一个Product对象的各个部件指定的抽象接口。需要定义抽象接口返回Product。
ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件。实现返回Product接口。
Product:具体的产品,最终建造出来的对象。
Director:指挥者,是构建一个使用Builder接口的对象,即指挥者的构建接口的参数是Builder。

建造者隐藏了产品是如何组装的,如果需要修改一个产品的组装,只需要再定义一个具体的建造者(ConcreteBuilder)就行了。

实例

Builder

public abstract class Builder {
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    public abstract Product getResult();
}

ConcreteBuilder

public class ConcreteBuilder1 extends Builder{
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.addParts("小黄人PartA");
    }

    @Override
    public void buildPartB() {
        product.addParts("小黄人PartB");
    }

    @Override
    public void buildPartC() {
        product.addParts("小黄人PartC");
    }

    @Override
    public Product getResult(){
        return product;
    }
}
public class ConcreteBuilder2 extends Builder{
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.addParts("海绵宝宝PartA");
    }

    @Override
    public void buildPartB() {
        product.addParts("海绵宝宝PartB");
    }

    @Override
    public void buildPartC() {
        product.addParts("海绵宝宝PartC");
    }

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

Product

public class Product {
    private List listParts = new ArrayList<>();

    public void addParts(String part){
        listParts.add(part);
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder("Product is build by ");

        for (String part:listParts
             ) {
            builder.append(part + " ");
        }
        return builder.toString();
    }
}

Director

public class Director {

    public void constructProduct(Builder builder){
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

使用,分别创建一个小黄人和一个海绵宝宝

public class Demo1Application {

    public static void main(String[] args) throws Exception {
        Builder builder1 = (Builder) new ConcreteBuilder1();
        Builder builder2 = (Builder) new ConcreteBuilder2();
        Director director = new Director();
        director.constructProduct(builder1);
        Product result1 = builder1.getResult();
        System.out.println(result1);
        director.constructProduct(builder2);
        Product result2 = builder2.getResult();
        System.out.println(result2);
    }
}

输出内容如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号