本文参考于 -----> 建造者模式(Bulider模式)详解http://c.biancheng.net/view/1354.html
建造者模式的定义与特点
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
该模式的主要优点如下:
- 封装性好,构建和表示分离。
- 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。
- 客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。
其缺点如下:
- 产品的组成部分必须相同,这限制了其使用范围。
- 如果产品的内部变化复杂,如果产品内部发生变化,则建造者也要同步修改,后期维护成本较大。
模式的结构与实现
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成 ,现在用一个生产自行车的案例来分析这四个要素。
具体的产品 :自行车
构建一个自行车类
package builder; /** * 实际需要构建的复杂对象 */ public class Bike { String seat; String frame; public String getSeat() { return seat; } public void setSeat(String seat) { this.seat = seat; } public String getFrame() { return frame; } public void setFrame(String frame) { this.frame = frame; } @Override public String toString() { return "Bike{" + "seat='" + seat + '\'' + ", frame='" + frame + '\'' + '}'; } }
抽象建造者 :有所有具体建造者要实现的方法
表示所有具体建造者必须要实现 createFrame( ) createSeat( ) createBike( ) , 代表意思 创建车架、创建车座 、创建自行车
package builder; /** * 抽象建造类 */ public abstract class Builder { protected Bike bike = new Bike(); public abstract void createFrame(); public abstract void createSeat(); public abstract Bike createBike(); }
具体建造类 :具体要建造的内容
具体建造内容是MobaiBike
package builder; /** * 具体建造类 */ public class MobaiBikeBuilder extends Builder{ @Override public void createFrame() { bike.setFrame("MobaiFrame"); } @Override public void createSeat() { bike.setSeat("MobaiSeat"); } @Override public Bike createBike() { return bike; } }
指挥者 : 指挥具体建造者建造产品
package builder; /** * 指挥者类 */ public class Director { Builder builder; public Director(Builder builder) { this.builder = builder; } public Bike construct() { builder.createFrame(); builder.createSeat(); return builder.createBike(); } }
测试
package builder; public class test { public static void main(String[] args) { Director director = new Director(new MobaiBikeBuilder()); System.out.println(director.construct()); } }
最后生产的具体产品