java设计模式之生成器模式

java设计模式参考文章:
Java设计模式实战23种设计模式介绍以及在Java中的实现Java设计模式 Java经典设计模式之五大创建型模式


## 定义 ##

将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。
Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,
它把复合对象的***创建过程加以抽象***,通过子类继承和重载的方式,
动态地创建具有复合属性的对象。

## 代码示例 ##

public interface Engine {
    void run();
}

public class HighEngine implements com.design_pattern.Builder.Engine {
    public void run() {
        System.out.println("跑的快");
    }
}

public class LowEngine implements com.design_pattern.Builder.Engine {
    public void run() {
        System.out.println("跑的慢");
    }
}

public interface Seat {
    void  msg();
}

public class HighSeat implements com.design_pattern.Builder.Seat {
    public void msg() {
        System.out.println("很舒服");
    }
}

public class LowSeat implements com.design_pattern.Builder.Seat {
    public void msg() {
        System.out.println("不是很舒服");
    }
}

public class Car {
    private Engine engine;
    private Seat seat;

    public Engine getEngine() {
        return engine;
    }

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

    public Seat getSeat() {
        return seat;
    }

    public void setSeat(Seat seat) {
        this.seat = seat;
    }
}

public interface CarBuilder {
    void makeEngine();
    void makeSeat();
}

public class HighCarBuilder implements CarBuilder {
    Car car = new Car();

    public void makeEngine() {
        car.setEngine(new HighEngine());
    }

    public void makeSeat() {
        car.setSeat(new HighSeat());
    }

    public Car getCar() {
        return car;
    }
}

public class LowCarBuilder implements CarBuilder {
    Car car = new Car();

    public void makeEngine() {
        car.setEngine(new LowEngine());
    }

    public void makeSeat() {
        car.setSeat(new LowSeat());
    }

    public Car getCar() {
        return car;
    }
}

public class CarDirector {
    public void makeCar(CarBuilder carBuilder) {
        carBuilder.makeEngine();
        carBuilder.makeSeat();
    }
}

##测试##

public class Main {
    public static void main(String[] args) {
        CarDirector carDirector = new CarDirector();

        LowCarBuilder lowCarBuilder = new LowCarBuilder();
        HighCarBuilder highCarBuilder = new HighCarBuilder();

        carDirector.makeCar(lowCarBuilder);
        carDirector.makeCar(highCarBuilder);

        Car lowCar = lowCarBuilder.getCar();
        lowCar.getEngine().run();
        lowCar.getSeat().msg();
        Car highCar = highCarBuilder.getCar();
        highCar.getEngine().run();
        highCar.getSeat().msg();
    }
}

## 优点 ##

1.生成器模式将对象的构造过程封装在具体的生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。
2.生成器模式将对象的构造过程从创建该对象的类中分离出来,使用户无须了解该对象的具体组件。
3.可以更加精细有效的控制对象的构造过程。生成器将对象的构造过程分解成若干步骤,
这就是程序可以更加精细,有效的控制整个对象的构造。
4.生成器模式将对象的构造过程与创建该对象类解耦,使对象的创建更加灵活有弹性。
5.当增加新的具体的生成器时,不必修改指挥者的代码,即该模式满足开-闭原则。

##解析##

  • 抽象工厂注重的是不同的工厂生产不同的产品,builder注重的是某个产品由不同的零件组成,产品的生产工程。Director就是负责产品组装的,是控制生产过程的;而builder是负责产品部件生产的。这样就实现了“过程”和“部件”的解耦。抽象工厂通过不同的构建过程生成不同的对象表示,而Builder模式通过相同的构建过程生成不同的表示。
  • StringBuilder的append();JDBC的PreparedStatement;JDOM的DomBuilder、SAXBuilder;MyBatis的SqlSessionFactoryBuilder。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值