Java设计模式---------- 生成器模式(建造者模式)

生成器模式(建造者模式)

1.生成器模式是将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。适合该模式的情景如下:对象复杂,利用构造方法创建对象无法满足客户需求;对象创建过程必须独立于创建该对象的类。
2.1)产品(Product):具体生产器要构造的复杂对象;

(2)抽象生成器(Bulider):抽象生成器是一个接口,该接口除了为创建一个Product对象的各个组件定义了若干个方法之外,还要定义返回Product对象的方法;

(3)具体生产器(ConcreteProduct):实现Builder接口的类,具体生成器将实现Builder接口所定义的方法;

(4)指挥者(Director):指挥者是一个类,该类需要含有Builder接口声明的变量。指挥者的职责是负责向用户提供具体生成器,即指挥者将请求具体生成器类来构造用户所需要的Product对象,如果所请求的具体生成器成功地构造出Product对象,指挥者就可以让该具体生产器返回所构造的Product对象。

演示代码如下:

产品(Product)层:

/*
想要创建一个宇宙飞船的产品
包含飞船的引擎;逃生舱;轨道舱等部分
 */
public class AirShipProduct {
    private OrbitalModule orbitalModule; //轨道舱
    private Enginee enginee;          //引擎
    private EscapeTower escapeTower;  //逃生舱

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

    public Enginee getEnginee() {
        return enginee;
    }

    public void setEnginee(Enginee enginee) {
        this.enginee = enginee;
    }

    public EscapeTower getEscapeTower() {
        return escapeTower;
    }

    public void setEscapeTower(EscapeTower escapeTower) {
        this.escapeTower = escapeTower;
    }
}
class OrbitalModule{
    private String name;

    public OrbitalModule(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
class Enginee{
    private String name;

    public Enginee(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
class  EscapeTower {
    private  String name;

    public EscapeTower(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

抽象生成器(Bulider)层:

/**
 * 产品生成器
 */
public interface AirShipBuidler {
    Enginee builderEnginee();
    OrbitalModule builderOrbitalModule();
    EscapeTower builderEscapeTower();
}

具体生产器(ConcreteProduct)层:

//构建者实现类
public class AirShipBuilderImpl  implements  AirShipBuidler{
    @Override
    public Enginee builderEnginee() {
        System.out.println("装配比亚迪引擎");
        return new Enginee("比亚迪引擎");
    }

    @Override
    public OrbitalModule builderOrbitalModule() {
        System.out.println("装配比亚迪轨道舱");
        return new OrbitalModule("比亚迪轨道舱");
    }

    @Override
    public EscapeTower builderEscapeTower() {
        System.out.println("装配比亚迪逃生舱");
        return new EscapeTower("比亚迪逃生舱");
    }
}

指挥者(Director)层:

/**
 * 指挥者 进行装配
 */
public interface AirShipDirector {
    //组装飞船
    AirShipProduct director();
}
//指挥者实现类
    public class AirShipDirectorImpl implements AirShipDirector {
    
    private AirShipBuidler buidler;

    public AirShipDirectorImpl(AirShipBuidler buidler) {
        this.buidler = buidler;
    }
    @Override
    public AirShipProduct director() {
        //构建飞船所需的各个部分
        Enginee enginee = buidler.builderEnginee();
        EscapeTower escapeTower = buidler.builderEscapeTower();
        OrbitalModule orbitalModule = buidler.builderOrbitalModule();
        //装配飞船
        AirShipProduct product = new AirShipProduct();
        product.setEnginee(enginee);
        product.setEscapeTower(escapeTower);
        product.setOrbitalModule(orbitalModule);
        return product;
    }
}

测试端:

/*
测试
 */
public class Cilent {
    public static void main(String[] args) {
        AirShipDirector director = new AirShipDirectorImpl(new AirShipBuilderImpl());
        AirShipProduct product = director.director();
        System.out.println(product.getEnginee().getName());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值