java设计模式之生成器模式

来源:互联网 发布:c语言字符串的复制 编辑:程序博客网 时间:2024/05/29 18:55

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。
原创粉丝点击