万里顾—程 2021-06-16 16:06 采纳率: 16.7%
浏览 32

建造者模式,把Director指挥者和抽象建造者结合后,客户端该怎么实现产品的建造?

具体的产品:

//具体的产品
public class Product {

    //有ABCD多个部件
    private String buildA;
    private String buildB;
    private String buildC;
    private String buildD;

    public String getBuildA() {
        return buildA;
    }

    public void setBuildA(String buildA) {
        this.buildA = buildA;
    }

    public String getBuildB() {
        return buildB;
    }

    public void setBuildB(String buildB) {
        this.buildB = buildB;
    }

    public String getBuildC() {
        return buildC;
    }

    public void setBuildC(String buildC) {
        this.buildC = buildC;
    }

    public String getBuildD() {
        return buildD;
    }

    public void setBuildD(String buildD) {
        this.buildD = buildD;
    }

    @Override
    public String toString() {
        return "Product{" +
                "buildA='" + buildA + '\'' +
                ", buildB='" + buildB + '\'' +
                ", buildC='" + buildC + '\'' +
                ", buildD='" + buildD + '\'' +
                '}';
    }
}

和指挥者结合后的抽象建造者:

//改造后的抽象建造者
public abstract class NewBuilder {

    protected static Product product = new Product();

    //具体产品的各个子部件的抽象方法
    abstract void buildA();//部件A
    abstract void buildB();//部件B
    abstract void buildC();//部件C
    abstract void buildD();//部件B

    //返回具体产品的方法
    abstract Product getProduct();

    //把导演类中的construct()方法合并到抽象建造者类中
    public static Product construct(NewBuilder newBuilder){
        newBuilder.buildA();
        newBuilder.buildB();
        newBuilder.buildC();
        newBuilder.buildD();

        return product;
    }

}

具体建造者:

//具体建造者,实现抽象建造者,完成复杂产品的各个部件的具体创建方法
public class Worker extends Builder{

   private Product product;  //提升作用域

   //通过具体建造者的构造器生成具体产品的对象
   public Worker(){
       product = new Product();
   }

    @Override
    void buildA() {
        product.setBuildA("完成部件A");
        System.out.println("完成部件A");
    }

    @Override
    void buildB() {
        product.setBuildB("完成部件B");
        System.out.println("完成部件B");
    }

    @Override
    void buildC() {
        product.setBuildC("完成部件C");
        System.out.println("完成部件C");
    }

    @Override
    void buildD() {
        product.setBuildD("完成部件D");
        System.out.println("完成部件D");
    }

    @Override
    Product getProduct() {
        System.out.println("完成产品ABCD的创建");
        return product;
    }
}

客户端:求大佬指点下面该怎么实现

public class NewClient {
    public static void main(String[] args) {

        

    }
}
  • 写回答

1条回答 默认 最新

  • a5156520 2022-12-29 19:47
    关注

    下面是我的理解,供参考:

    package builderpattern;
    public class NewClient {
        public static void main(String[] args) {
     
            //  https://baike.baidu.com/item/%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F/3229729?fr=aladdin
            //  创建建造者
            Worker wk = new Worker();
            
            // 建造产品
            wk.construct(wk);
            Product p =  wk.getProduct();  // 获取产品
            
            // 获取四个产品信息
            System.out.println("产品A为:"+p.getBuildA());
            System.out.println("产品B为:"+p.getBuildB());
            System.out.println("产品C为:"+p.getBuildC());
            System.out.println("产品D为:"+p.getBuildD());
            
            
        }
    }
    

    img

    评论 编辑记录

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿