美文网首页
建造者模式

建造者模式

作者: yuzhiyi_宇 | 来源:发表于2019-02-23 19:53 被阅读0次

建造者模式(Builder)也被称为生成器模式,将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。

image

建造者模式中的角色:

  • Director:导演类,负责安排已有模块的顺序,然后通知 Builder 开始构造。
  • Builder:抽象 Builder 类,规范产品的组建,一般由子类实现。
  • ConcreteBuilder:具体建造者,实现抽象 Builder 类定义的所有方法,并且返回一个组建好的对象。
  • Product:产品类。

建造者模式的简单实现

(1) 创建产品类

public class Circle {

    private Point mPoint;
    private double mRadius;

    public void setPoint(Point Point) {
        this.mPoint = Point;
    }

    public void setRadius(double Radius) {
        this.mRadius = Radius;
    }

    public Point getPoint() {
        return mPoint;
    }

    public double getRadius() {
        return mRadius;
    }
}
public class Point {

    private double x;
    private double y;

    public void setX(double x) {
        this.x = x;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }
}

(2) 创建 Builder 类

public abstract class Builder {
    public abstract void buildPoint(Point point);
    public abstract void buildRadius(double radius);
    public abstract Circle draw();
}

实现抽象 Builder 类。

public class DrawCircleBuilder extends Builder {

    private Circle circle = new Circle();

    @Override
    public void buildPoint(Point point) {
        circle.setPoint(point);
    }

    @Override
    public void buildRadius(double radius) {
        circle.setRadius(radius);
    }

    @Override
    public Circle draw() {
        return circle;
    }
}

(3) 用导演类来统一组装过程

public class Director {

    Builder mBuilder = null;
    public Director(Builder builder) {
        this.mBuilder = builder;
    }

    public Circle drawCircle(Point point, double radius) {
        mBuilder.buildPoint(point);
        mBuilder.buildRadius(radius);
        return mBuilder.draw();
    }
}

(4) 客户端调用导演类

public class DrawCircle {
    public static void main(String[] args) {
        Builder builder = new DrawCircleBuilder();
        Director director = new Director(builder);
        Point point = new Point();
        point.setX(10);
        point.setY(10);
        director.drawCircle(point, 10);
    }
}

建造者模式的使用场景

使用场景:
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
相同的方法,不同的执行顺序,产生不同的事件结果时。
多个部件或零件都可以被装配到一个对象中,但是产生的运算结果又不同时。
产品类非常复杂,或者产品类中的调用顺序不同而产生不同的效能。
在创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定,但是对象的内部组成构件面临着复杂的变化。

建造模式的优缺点

优点:
使用建造模式可以使客户端不必知道产品内部组成的细节。
具体的建造类之间是相互独立的,容易扩展。
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

缺点:产生多余的 Build 对象以及导演类。

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

      本文链接:https://www.haomeiwen.com/subject/pmapyqtx.html