模式9.建造者模式-Java

1.定义:

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

  • 将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
  • 使用建造者模式,用户只需指定需要建造的类型就可以得到他们,而具体的建造过程和细节就不需知道了

2.应用场景

让建造过程固定,建造细节可变、所以定义抽象类,固定建造过程。

让具体类去继承抽象类,实现具体类的建造需求。

指挥者指导对象的建造过程,根据用户的选择一步一步构建,隔离用户和建造过程的关联。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hu6zlE0n-1620538693623)(image-20210509110716725.png)]

  • 主要用于创建一些复杂的对象,这些对象的内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

    当创建复杂对象的算法(指挥者)应该独立于该对象的组成部分(具体类)以及他们的装配方式(父类)时适用。

  • 好处: 使得建造代码与表示代码分离,因为建造者模式隐藏了产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就好了。

3.助理解代码

3.1产品类,由多个部件组成

package com.builder;

import java.util.ArrayList;
import java.util.List;

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 s:parts){
            System.out.println(s);
        }
    }
}

3.2 Builer类,抽象建造者,确定产品由几个部件构成,并且声明得到产品建造后结果的方法

package com.builder;
//抽象建造者类: 确定产品由哪些部件组成,并且声明一个得到产品建造后结果的方法

public abstract  class Builder {
    public abstract void BuilderPartA();
    public abstract void  BuilderPartB();
    public abstract  Product Getresult();
}

3.3 具体建造者类1

package com.builder;
//具体建造者类
public class ConcreteBuilder1 extends Builder{
    private Product product=new Product();

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

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

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

3.4具体建造者类2

package com.builder;

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

    @Override
    public void BuilderPartA() {
        product.add("部件X");
    }

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

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

3.5指挥者类

package com.builder;

//指挥者类
public class Director {
    public void Construct(Builder builder){
        builder.BuilderPartA();
        builder.BuilderPartB();
    }
}

3.6客户端类

package com.builder;
//客户端不需知道具体的建造过程
public class Client {
    public static void main(String[] args) {
        Director director=new Director();
        Builder b1=new ConcreteBuilder1();
        Builder b2=new ConcreteBuilder2();
        director.Construct(b1);
        Product p1=b1.Getresult();
        p1.show();

        director.Construct(b2);
        Product p2=b2.Getresult();
        p2.show();
    }



}

3.6 运行结果

产品创建中....
部件A
部件B
产品创建中....
部件X
部件Y
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值