生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。----WIKIPEDIA
个人的理解:
建造者模式可以设置不同的属性或者行为,创建出不一样的对象。比如说生产汽车,假如有三个重要的工序,塑形、拼装、上色。那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的。通过创建者模式来创建出对象的表现形式也自然就不一样。
借助上面这个例子,画出他的一个类图
主要的代码如下所示
public class Car { private String shape; private String assemble; private String color;}
public abstract class CarBuilder { protected Car car = new Car(); public abstract void setShape(String shape); public abstract void setAssemble(String assemble); public abstract void setColor(String color); public Car getCar(){ return this.car; } }
public class HongQICarBuilder extends CarBuilder{ @Override public void setShape(String shape) { this.car.setShape(shape); } @Override public void setAssemble(String assemble) { this.car.setAssemble(assemble); } @Override public void setColor(String color) { this.car.setColor(color); } }
这个例子是根据定义以及自己对于创建者模式的理解写的,核心的思想是,通过这样的设计利用不同的实现方法来创建不同的对象出来,这个是其本质。
另外参考其他书籍如设计模式之禅中介绍到可以创建出不同的行为。
假设这样的情景,车子从启动、行驶、停止三个环节,然后我想要的是,我指定那几个环节发生动作哪几个环节就要发生动作。这样的话,创建出来的对象的动作或者说行为是不同的。
主要的代码
public abstract class CarBuilder { public abstract void setOrder(List<String> orderList); public abstract Car getCar(); }
public abstract class Car { private List<String> exeOrderList = new ArrayList<String>(); public abstract void startUp(); public abstract void run(); public abstract void stop(); public final void templateMethod(){ for (String exeOrder : exeOrderList) { if("startUp".equals(exeOrder)){ this.startUp(); }else if("run".equals(exeOrder)){ this.run(); }else if("stop".equals(exeOrder)){ this.stop(); } } } public final void setOrder(List<String> exeOrderList){ this.exeOrderList = exeOrderList; } }
public class HongQiCar extends Car{ @Override public void startUp() { System.out.println("红旗车启动"); } @Override public void run() { System.out.println("红旗车行驶中"); } @Override public void stop() { System.out.println("红旗车停止"); } }
创建者实现类
public class HongQiCarBuilder extends CarBuilder{ private HongQiCar hongQiCar = new HongQiCar(); @Override public void setOrder(List<String> orderList) { this.hongQiCar.setOrder(orderList); } @Override public Car getCar() { return this.hongQiCar; } }
其中这个产生对象行为不同,需要借助模板方法模式这个模式会在后面博文中进行讲解。
适用的范围
1. 相同的方法,顺序不同产生的产品不一样。
2. 多个属性,拼装时不同拼装出来的产品也不一样。
3. 产品类复杂,或者产品类中的调用顺序不同产生了不同的效能。
比较
与工厂方法模式比较,创建者关注的是零件的类型和装配的顺序,但是工厂方法关注的是创建一个个的对象,可以是零件,但是它不关注组装顺序。
源码下载地址:下载设计模式源代码
时间: 2024-10-04 21:36:19