设计模式教程(5)-建造者模式

  1. 建造者模式(Builder Pattern)

概述

建造者模式解决如下问题:

  • 一个类(同样的建造过程)如何创建复杂对象的不同表示?
  • 如何简化一个包含复杂对象的类?

直接在一个类中创建和装备在复杂对象的各部分是不灵活的设计,一个类创建复杂对象的特定表示,在以后如果想替换特定表示是不可能的。

建造者模式提供如下解决方法:

  • 在一个分离的建造者对象中封装复杂对象的创建和装配。
  • 一个类委托建造者创建对象,而不是直接创建对象。

一个类可以委托不同的建造者对象去创建一个复杂对象的不同的表示。

定义:

建造者模式的意图是将一个复杂对象的构造从它的表示中分离出来。同样的构造过程可创建不同的表示。

优点:

  • 允许你变化一个产品的内部表示。
  • 封装了复杂对象的构造和表示。
  • 提供对构造过程的步骤的控制。

缺点:

  • 要求为每一个不同给的产品类别创建一个分离的建造者。
  • 要求建造者类是可变的。
  • 类的数据成员不能保证被初始化。
  • 不支持依赖注入。

bc35e01316bfd0977c405d347b50d32e5e0.jpg

03b987d7eabd0d79aecb5bd896ac4716b4c.jpg

 

class Car {

    private int wheels;

    private String color;

 

    public Car() {

    }

 

    public String getColor() {

        return color;

    }

 

    public void setColor(final String color) {

        this.color = color;

    }

 

    public int getWheels() {

        return wheels;

    }

 

    public void setWheels(final int wheels) {

        this.wheels = wheels;

    }

 

    @Override

    public String toString() {

        return "Car [wheels = " + wheels + ", color = " + color + "]";

    }

}

 

interface CarBuilder {

    Car build();

 

    CarBuilder setColor(final String color);

 

    CarBuilder setWheels(final int wheels);

}

 

class CarBuilderImpl implements CarBuilder {

    private Car car;

 

    public CarBuilderImpl() {

        car = new Car();

    }

 

    @Override

    public Car build() {

        return car;

    }

 

    @Override

    public CarBuilder setColor(final String color) {

        car.setColor(color);

        return this;

    }

 

    @Override

    public CarBuilder setWheels(final int wheels) {

        car.setWheels(wheels);

        return this;

    }

}

 

public class CarBuildDirector {

    private CarBuilder builder;

 

    public CarBuildDirector(final CarBuilder builder) {

        this.builder = builder;

    }

 

    public Car construct() {

        return builder.setWheels(4)

                      .setColor("Red")

                      .build();

    }

 

    public static void main(final String[] arguments) {

        final CarBuilder builder = new CarBuilderImpl();

 

        final CarBuildDirector carBuildDirector = new CarBuildDirector(builder);

 

        System.out.println(carBuildDirector.construct());

    }

}

转载于:https://my.oschina.net/u/3963977/blog/2961957

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值