2-建造者模式

建造者模式

建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

带指挥者的建造者模式

产品类

//产品类
public class Car {
    private String wheel;//轮子
    private String engine;//引擎
    private String frame;//车架

    public String getWheel() { return wheel; }
    public void setWheel(String wheel) { this.wheel = wheel; }
    public String getEngine() { return engine; }
    public void setEngine(String engine) { this.engine = engine; }
    public String getFrame() { return frame; }
    public void setFrame(String frame) { this.frame = frame; }

    @Override
    public String toString() {
        return "Car{" +
                "wheel='" + wheel + '\'' +
                ", engine='" + engine + '\'' +
                ", frame='" + frame + '\'' +
                '}';
    }
}

建造者类

//建造者接口
public interface CarBuilder {
    void setWheel();
    void setEngine();
    void setFrame();
    Car build();
}
//建造者实现类
public class AudiCarBuilder implements CarBuilder {
    private Car car=new Car();
    @Override
    public void setWheel() {
        car.setWheel("奥迪轮子");
    }

    @Override
    public void setEngine() {
        car.setEngine("奥迪轮子");
    }

    @Override
    public void setFrame() {
        car.setFrame("奥迪车架");
    }

    @Override
    public Car build() {
        return car;
    }

}

指挥者类

//指挥者
public class Director {
    private CarBuilder builder=null;

    public Director(CarBuilder builder) {
        this.builder = builder;
    }
    public Car build(){
        builder.setWheel();
        builder.setEngine();
        builder.setFrame();
        return builder.build();
    }
}

测试类

//测试类
class Test {
    public static void main(String[] args) {
        CarBuilder builder=new AudiCarBuilder();
        Director director=new Director(builder);
        Car car=director.build();
        System.out.println(car);
    }
}

内部类建造者模式

将建造者类放在产品类中作为静态内部类,并且设定方法返回自身使得建造过程为链式便于使用。

产品类及其内部建造者类

public class Bike {
    private String wheel;//轮子
    private String frame;//车架

    public String getWheel() { return wheel; }
    public void setWheel(String wheel) { this.wheel = wheel; }
    public String getFrame() { return frame; }
    public void setFrame(String frame) { this.frame = frame; }

    @Override
    public String toString() {
        return "Bike{" +"wheel='" + wheel + '\'' 
            +", frame='" + frame + '\'' +'}';
    }
    public static class BikeBuilder{
        private String wheel;//轮子
        private String frame;//车架
        BikeBuilder setWheel(String wheel){
            this.wheel=wheel;
            return this;
        }
        BikeBuilder setFrame(String frame){
            this.frame=frame;
            return this;
        }
        Bike build(){
            Bike bike=new Bike();
            bike.setFrame(frame);
            bike.setWheel(wheel);
            return bike;
        }
    }
}

测试类

class Test {
    public static void main(String[] args) {
        Bike bike= new Bike.BikeBuilder().setFrame("自行车车架A")
                .setWheel("山地胎")
                .build();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值