`

设计模式之创建者模式Builder

 
阅读更多

创建者模式

场景

  • 我们要建造一个复杂的产品,比如:神州飞船、Iphone。这个复杂的产品的创建,有这样一个问题需要处理装配这些字子组件是不是有个步骤问题
  • 实际开发中,我们所需要的对象构建是,也非常复杂,有很多步骤需要处理时
 
建造模式的本质
分离了对象子组件的单独构造(有Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象,这个模式适用于:某个对象的构建过程复杂的情况下使用
由于实现了构建和装配的解耦,不同的构造器,相同的装配,也可以做出不同的对象;相同的构建起,不同的装配顺序也可以做出不同的对象;也就是实现了构建算法,装配算法的解耦,实现了更好的复用
结构
  • Builder 抽象建造者接口,规范各个组成部分的构建。
  • ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。
  • Product 产品角色,创建返回的对象。
  • Director 导演者角色,负责创建以及使用。

结构图

 

 

代码示例

 

/**
 * 宇宙飞船
 */
public class AirShip {

    private OrbitalModule orbitalModule ;//轨道舱模块
    private Engine engine; //发动机
    private EscapePower escapePower; //逃逸塔

    public OrbitalModule getOrbitalModule() {
        return orbitalModule;
    }

    public void setOrbitalModule(OrbitalModule orbitalModule) {
        this.orbitalModule = orbitalModule;
    }

    public Engine getEngine() {
        return engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }

    public EscapePower getEscapePower() {
        return escapePower;
    }

    public void setEscapePower(EscapePower escapePower) {
        this.escapePower = escapePower;
    }
}

class OrbitalModule{

    String orbitalNme;

    public OrbitalModule(String orbitalNme) {
        super();
        this.orbitalNme = orbitalNme;
    }

    public String getOrbitalNme() {
        return orbitalNme;
    }

    public void setOrbitalNme(String orbitalNme) {
        this.orbitalNme = orbitalNme;
    }
}

class Engine{

    private String engineName;

    public Engine(String engineName) {
        this.engineName = engineName;
    }

    public String getEngineName() {
        return engineName;
    }

    public void setEngineName(String engineName) {
        this.engineName = engineName;
    }
}

class EscapePower{

    private String escapePowerName ;

    public EscapePower(String escapePowerName) {
        this.escapePowerName = escapePowerName;
    }

    public String getEscapePowerName() {
        return escapePowerName;
    }

    public void setEscapePowerName(String escapePowerName) {
        this.escapePowerName = escapePowerName;
    }
}

 
 

/**
 * 构建子组件
 */
public interface AirShipBuilder {
    Engine builderEgine();
    OrbitalModule builderOrbitalModule();
    EscapePower builderEscapePower();
}

public class SxtAirShipBuilder implements AirShipBuilder {
    @Override
    public Engine builderEgine() {
        System.out.println("构建发动机");
        return new Engine("发动机");
    }

    @Override
    public OrbitalModule builderOrbitalModule() {
        System.out.println("构建轨道舱模块");
        return new OrbitalModule("轨道舱模块");
    }

    @Override
    public EscapePower builderEscapePower() {
        System.out.println("构建逃逸塔");
        return new EscapePower("逃逸塔");
    }
}

 

/**
 * 装配
 */
public interface AirShipDirector {
    /**
     * 组装airship
     * @return
     */
    AirShip directorAirShip();
}


/**
 * 组装宇宙飞船  装备者调用构建者创建对象
 */
public class SxtAirShipDirector implements AirShipDirector {
    AirShipBuilder builder;

    public SxtAirShipDirector(AirShipBuilder builder) {
        this.builder = builder;
    }

    @Override
    public AirShip directorAirShip() {
        Engine engine =builder.builderEgine();
        OrbitalModule orbitalModule = builder.builderOrbitalModule();
        EscapePower escapePower =builder.builderEscapePower();
        //组装
        AirShip airShip = new AirShip();
        airShip.setEngine(engine);
        airShip.setEscapePower(escapePower);
        airShip.setOrbitalModule(orbitalModule);
        return airShip;
    }
}

 

public class Client {
    public static void main(String[] args){

        AirShipBuilder builder = new SxtAirShipBuilder();
        AirShipDirector director = new SxtAirShipDirector(builder);
        AirShip ship = director.directorAirShip();

        System.out.println(ship.getEngine().getEngineName());
        System.out.println(ship.getOrbitalModule().getOrbitalNme());
        System.out.println(ship.getEscapePower().getEscapePowerName());

    }
}

 

 开发中的应用场景

  • StringBuilder类的append方法
  • SQL中的PrepareStatement
  • JDOM中,DomBuilder、SAXBuilder 
  • 大小: 12.7 KB
分享到:
评论

相关推荐

    设计模式-创建者模式(Builder)

    设计模式-创建者模式(Builder) 创建者模式(Builder)是软件设计模式中的一种结构型模式,它将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式允许用户可以只通过指定复杂对象...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    设计模式之创建模式Builder

    建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...

    设计模式 创建型模式 Builder模式(建造者)

    统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的步骤组合而成;这些的算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求改变而发生...

    (设计模式)Builder

    Builder设计模式是一种创建型设计模式,它提供了一种方法来分步骤构造复杂的对象,使得构建过程和表示分离,允许用户只关注对象的构建而无需关心具体实现细节。在Java或其他编程语言中,Builder模式通常用于创建那些...

    设计模式之创建者模式.pdf

    ### 设计模式之创建者模式详解 #### 一、创建者模式概述 创建者模式(Builder Pattern),又称建造者模式,是一种常用的软件设计模式。它主要用于解决对象创建时的复杂性和灵活性问题。创建者模式的核心思想是将一...

    设计模式之Builder

    "Builder"模式是其中的一种行为设计模式,它主要用于构造复杂对象的创建过程,将对象的创建步骤分离,使得同样的构建过程可以创建不同的表示。Builder模式允许我们更加灵活地构造对象,而无需关注其内部的构建细节。...

    builder设计模式源码

    Builder设计模式是一种软件设计模式,它允许我们分步骤构建复杂对象,通过将构造过程与对象的表示分离,使得相同的构造过程可以创建不同的表示。在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的...

    C#设计模式之建造者(Builder)模式示例源代码

    在深入探讨C#设计模式中的建造者(Builder)模式之前,我们先来理解一下什么是设计模式。设计模式是在软件工程中解决常见问题的一种通用可重用解决方案,它们提供了一种标准化的方法来解决软件开发中遇到的挑战。...

    设计模式-Builder模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    (创建型模式)Builder模式

    Builder模式是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式在程序开发中常用于构造产品对象,尤其是当对象的构造过程较为复杂时,Builder模式能够帮助我们更好地...

    JAVA设计模式chm文档

    设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计...

    晨会分享Builder设计模式

    Builder设计模式是一种软件设计模式,它属于创建型模式,主要用于对象的复杂构建过程。这种模式将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。Builder模式的核心在于提供一个构建器接口,该接口...

    [创建型模式]设计模式之建造者模式(Builder Pattern)

    【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...

    23种设计模式的java实现-Builder

    Builder设计模式是创建型模式之一,主要解决复杂对象的构建问题,使得构建过程与表示分离。 Builder模式的核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式通常应用于...

    设计模式实现——创建者模式

    创建者模式,也被称为构造器模式,是一种设计模式,它提供了创建对象的统一接口,隔离了客户端代码与对象的创建细节,使得系统更加灵活,易于维护。这种模式主要用于当一个对象的构建与其表示分离时的情况。 创建者...

    创建者模式(Builder)

    创建者模式是一种设计模式,属于建造者模式,它将复杂的对象构造过程分离开来,使得相同的构造过程可以创建不同的表示。这种模式的主要优点在于能够隔离对象的构建过程,使代码更加清晰,易于维护,并且支持更复杂的...

    C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

    C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例 本文主要介绍了C#设计模式之Builder生成器模式解决带老婆配置电脑问题,简单介绍了生成器模式的概念、功能并结合具体实例形式分析了C#生成器模式解决配...

    设计模式文档 chm

    设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计...

Global site tag (gtag.js) - Google Analytics