标签:
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
主要解决:在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
关键代码 : 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。
使用场景:
汽车有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术).
如果脑中还没有建造者模式,可以想象在游戏开发中,游戏角色是一个复杂的产品,它包括性别、脸型、身材等多个组成部分,不同的角色组成部分有所差异。 无论是何种类型的游戏的游戏角色,它的创建步骤都大同小异,都需要逐步创建其组成部分,再将各组成部分装配成一个完整的游戏角色。如这张图:
类图 :
1. 一个典型的复杂类对象代码
Product.java
public class Product { private String name; private String type; public void showProduct() { System.out.println("名称:" + name); System.out.println("型号:" + type); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
2 建立一个抽象的建造者
Builder.java
public abstract class Builder { public abstract void setPart(String arg1, String arg2); public abstract Product getProduct(); }
3. 创建具体的建造者
ConcreteBuilder.java
public class ConcreteBuilder extends Builder{ private Product product = new Product(); public Product getProduct() { return product; } public void setPart(String arg1, String arg2) { product.setName(arg1); product.setType(arg2); } }
4 创建一个导演类
Director.java
public class Director { private Builder builder = new ConcreteBuilder(); public Product getAProduct() { builder.setPart("宝马汽车", "X7"); return builder.getProduct(); } public Product getBProduct() { builder.setPart("奥迪汽车", "Q5"); return builder.getProduct(); } }
5. 运行测试代码
BuilderDemo.java
public class BuilderDemo { public static void main(String[] args) { Director director = new Director(); Product product1 = director.getAProduct(); product1.showProduct(); Product product2 = director.getBProduct(); product2.showProduct(); } }
建造者模式与工厂模式的区别 :
总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;
建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。
标签:
原文地址:http://www.cnblogs.com/wangshuo1/p/pattern_4.html