码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-04 建造者模式(创建型模式)

时间:2016-08-22 18:19:29      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

一 建造者模式

  建造者模式(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();
    }

}

 

建造者模式与工厂模式的区别 :

  总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;

  建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

 

下一篇 设计模式-05 原型模式(创建型模式)

 

设计模式-04 建造者模式(创建型模式)

标签:

原文地址:http://www.cnblogs.com/wangshuo1/p/pattern_4.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!