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();
    }
}
发布了27 篇原创文章 · 获赞 1 · 访问量 907

猜你喜欢

转载自blog.csdn.net/hu853996234/article/details/103192341
今日推荐