Java 建造者模式

建造者模式在Java里面十分常见,它将一个复杂对象的构造与表示分离,使同样的构建过程可以创建不同的表示,这中设计模式被称为建造者模式,最常见的AlertDialog.Builder类,用于创建dialog,其组成部分是不变的,但是每一个部分都可以灵活设置。

建造者模式的结构

建造者模式分为四个部分:具体产品,抽象建造者,具体建造者,使用者。举例:

static class Car {
        String engine;
        String frame;
        String wheel;

        public void setEngine(String engine) {
            this.engine = engine;
        }

        public void setFrame(String frame) {
            this.frame = frame;
        }

        public void setWheel(String wheel) {
            this.wheel = wheel;
        }

        public void show() {
            System.out.println(String.format(
                    "车的引擎型号:%s, 车的框架型号:%s, 车的轮子型号:%s。",
                    this.engine,this.frame,this.wheel
            ));
        }
    }

    abstract static class Builder {
        protected Car car = new Car();
        abstract Builder buildEngine(String engine);
        abstract Builder buildFrame(String frame);
        abstract Builder buildWheel(String wheel);
        public Car build() {
            return car;
        }
    }

    static class CarBuilder extends Builder {
        @Override
        CarBuilder buildEngine(String engine) {
            car.setEngine(engine);
            return this;
        }

        @Override
        CarBuilder buildFrame(String frame) {
            car.setFrame(frame);
            return this;
        }

        @Override
        CarBuilder buildWheel(String wheel) {
            car.setWheel(wheel);
            return this;
        }
    }

    static class Buyer {
        private CarBuilder builder;

        public Buyer(CarBuilder builder) {
            this.builder = builder;
        }

        private Car build() {
            return builder.build();
        }
    }

    @Test
    public void main() {
        CarBuilder builder = new CarBuilder();
        builder.buildEngine("Type1").buildFrame("Type2").buildWheel("Type3");
        Buyer buyer = new Buyer(builder);
        Car car = buyer.build();
        car.show();
    }

输出结果:
-----------------------------------------------
车的引擎型号:Type1, 车的框架型号:Type2, 车的轮子型号:Type3。
-----------------------------------------------

这里以汽车作为具体产品,实际上汽车的创建是一个很复杂的对象,拥有众多的结构和不见,然后不同的汽车各个部分的组成可能不同,但是总的部分是相对固定的,所以可以使用建造者模式,Android中的AlertDialog是在产品只有dialog的情况下,忽略了抽象建造者和具体的使用者,通过·语法直接分部件组装。

你可能感兴趣的:(Java 建造者模式)