美文网首页
创建者模式

创建者模式

作者: 忘净空 | 来源:发表于2016-08-14 10:07 被阅读33次

模式定义

将一个复杂对象的构建与它的表示分离,使得相同的构建过程可以创建不同的表示。

模式结构

模式结构

Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。

代码实现

@Data
public class AirShip {
    
    private OrbitalModule orbitalModule;  //轨道舱
    private Engine engine; //发动机

    public void launch(){
        System.out.println("发射!");
    }
}
@Data
@AllArgsConstructor
class OrbitalModule{
    private String name;
}
@Data
@AllArgsConstructor
class Engine {
    private String name;
}


public interface AirShipBuilder {
    Engine builderEngine();
    OrbitalModule builderOrbitalModule();
}

public class SxtAirShipBuilder implements AirShipBuilder {
    //StringBuilder, 以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
    public Engine builderEngine() {
        System.out.println("构建发动机!");
        return new Engine("发动机!");
    }

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


public interface AirShipDirector {
    /**
     * 组装飞船对象
     * @return
     */
    AirShip   directAirShip();
}

public class SxtAirshipDirector implements AirShipDirector {
    private AirShipBuilder builder;
    public SxtAirshipDirector(AirShipBuilder builder) {
        this.builder = builder;
    }
    public AirShip directAirShip() {
        Engine e = builder.builderEngine();
        OrbitalModule o = builder.builderOrbitalModule();

        //装配成飞船对象
        AirShip ship = new AirShip();
        ship.setEngine(e);
        ship.setOrbitalModule(o);
        
        return ship;
    }
}


public class Client {
    public static void main(String[] args) {
        AirShipDirector director = new SxtAirshipDirector(new SxtAirShipBuilder());
        AirShip ship = director.directAirShip();
        System.out.println(ship.getEngine().getName());
        ship.launch();
        
    }
}

模式的优缺点

优点

  1. 松散耦合
    产品构建和产品表现分离。

  2. 可以很容易地改变产品的内部表示
    要想改变产品的内部表示,只需要切换Builder的具体实现即可,不用管Director,因此变得容易。

  3. 更好的复用性
    构建算法可以复用,具体产品的实现也可以复用。

缺点

  1. 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

  2. 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

思考

模式本质:分离整体构建算法和部件构造。

开发中的应用场景

  1. 如果构讲对象的算法,应该独立于该对象的组成部分以及它们的装配方式时。

  2. 如果同一个构建过程有着不同的表示时。

构建的过程是同一的,不变的,变化的部分放到生成器部分

相关文章

  • OkHttp的使用之设计模式

    使用的设计模式有: 创建者模式 策略模式 门面模式 责任链模式

  • 2. 设计模式与架构

    一、 设计模式 创建型模式抽象工厂模式(AbstractFactory)、工厂模式(Factory)、创建者模式(...

  • 创建者模式

    1.工厂模式 给登录模块做一些基础功能 需求1:登录模块名称不符合要求的警示框 需求2:密码也要这样的警示框 需求...

  • 创建者模式

    模式定义 将一个复杂对象的构建与它的表示分离,使得相同的构建过程可以创建不同的表示。 模式结构 Builder:生...

  • 创建者模式

    创建者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。隐藏了复杂对象的创建过程...

  • 创建型模式-创建者模式

    创建者模式是为了创建复杂对象而存在的最佳实践模式.突然想到工作中,使用的新建创意这个功能,感觉可以用创建者模式去组...

  • 工厂模式(创建者模式)

    定义 :定义一个用于创建对象的接口,让子类决定实例化哪个类。使用场景: 任何需要生成复杂对象的地方 Android...

  • Builder Pattern

    创建者模式 定义 Builder design pattern is an alternative way to ...

  • 设计模式-建造者模式(三)

    建造者模式,有4个角色: 导演角色(Director) 抽象创建者角色 (Builder) 具体创建者角色(Con...

  • 创建者模式Builder

    https://www.cnblogs.com/begin1949/p/4930896.html https://...

网友评论

      本文标题:创建者模式

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