0
点赞
收藏
分享

微信扫一扫

【设计模式_青春版】创建型|建造者模式

米小格儿 2022-03-12 阅读 76

文章目录

建造者模式(创建型)

建造者模式包含如下角色:抽象建造者类、具体建造者类、产品类、指挥者类。

概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-di5uXrvT-1646780266512)(java_notes.assets/image-20220218151618750-164516858015811.png)]

工厂造零件,建造者造更大的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6wA28J1-1646780266514)(java_notes.assets/image-20220218151752130-164516867340612.png)]

代码实现

public abstract class Builder{
    //一些抽象方法
    public abstract void buildA();
    public abstract void buildB();
    public abstract A createA()
}
//具体建造者 XXXBuilder YYYBuilder
public class XXXBuilder extends Builder {
    //建造的对象
    A a = new A();
    //建造A的步骤buildA buildB
     @Override
    public void buildA() {
        a.setA("A步骤的完成结果,比如地基");
    }
    public void buildB() {
        a.setB("B步骤的完成结果,比如钢筋水泥");
    }
    ...
}
	//指挥者
    public class Director {
        //抽象的建造者
        private Builder builder;
        //指挥具体的建造者
        public Director(Builder builder){
            this.builder = builder;
        }
        //指挥建造过程并返回最后总结果
        public A construct(){
            builder.buildA();
            builder.buildB();
            return builder.createA();
        }
    }
//测试
public class Client {
    public static void main(String[] args) {
        //指挥者指挥XXXBuilder建造者来建造A
        Director director = new Director(new XXXBuilder());
       	A a = director.construct();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PcpSsyXn-1646780266514)(java_notes.assets/image-20220218152633194-164516919462213.png)]

内部类和链式编程

public class Phone {
    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;
    private Phone(Builder builder) {
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;
    }
    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainboard='" + mainboard + '\'' +
                '}';
    }
    //**********留意这里 发现没有指挥者了,Builder就充当了指挥者
    public static final class Builder {
        private String cpu;//可以带默认值
        private String screen;
        private String memory;
        private String mainboard;
        public Builder cpu(String cpu) {
            this.cpu = cpu;
            return this;//**********留意这里
        }
        public Builder screen(String screen) {
            this.screen = screen;
            return this;
        }
        public Builder memory(String memory) {
            this.memory = memory;
            return this;
        }
        public Builder mainboard(String mainboard) {
            this.mainboard = mainboard;
            return this;
        }
        public Phone build() {
            return new Phone(this);
        }
    }
}
//测试
public class Client {
    public static void main(String[] args) {
        Phone phone = new Phone.Builder()
                .cpu("intel")
                .screen("三星屏幕")
                .memory("金士顿内存条")
                .mainboard("华硕主板")
                .build();
        System.out.println(phone);
    }
}

优缺点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-37J8LOaR-1646780324812)(java_notes.assets/image-20220218153404427-164516964539014.png)]

应用场景

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8bp1JCA-1646780266514)(java_notes.assets/image-20220218153404427-164516964539014.png)]

举报

相关推荐

0 条评论