为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式之建造者模式

标签:
Java 架构

建造器模式与工厂方法类似,不过侧重点不同。工厂方法模式主要目的的组装一个产品,强调产品的初始化和设置。而建造器模式强调的是产品各部件的组装顺序(即方法调用的顺序)

产品类

产品类可以使用模板方法模式。也可以不用。

/**
 * 产品接口
 */
public abstract class Product {
    // A 步骤
    abstract public void stepA();
    // B 步骤
    abstract public void stepB();
}

/**
* X 产品
 */
public class ProductX extends Product {
    public void stepA(){}
    public void stepB(){}
    public void doSomething(){}
}

/**
 * Y产品
 */
public class ProductY extends Product {
    public void stepA(){}
    public void stepB(){}
    public void doSomething(){}
}
建造类

有多少个产品,就可以对应多少个建造器实现类。注意两个建造实现类的setPart方法内的组装顺序不同

/**
 * 建造器接口
 */
public abstract class Builder {
    // 设置产品的不同部分,以获得不同的产品
    public abstract void setPart();
    // 建造产品
    public abstract Product buildProduct();
}

/**
 * X 建造器
 */
public class ConcreteBuilderX extends Builder {

    private Product product = new ProductX();

    @Override
    public void setPart() {
        product.stepA();
        product.stepB();
    }

    @Override
    public Product buildProduct() {
        return product;
    }
}

/**
 * Y 建造器
 */
public class ConcreteBuilderY extends Builder {

    private Product product = new ProductX();

    @Override
    public void setPart() {
        product.stepB();
        product.stepA();
    }

    @Override
    public Product buildProduct() {
        return product;
    }
}
导演类

导演类的作用是使客户端不直接面向建造器类,降低系统的耦合性。一个导演类就足够了,里面管理着所有的建造器。

/**
 * 导演类
 */
public class Director {
    private Builder builderX = new ConcreteBuilderX();
    private Builder builderY = new ConcreteBuilderY();

    public Product getXProduct() {
        builderX.setPart();
        return (Product) builderX.buildProduct();
    }

    public Product getYProduct() {
        builderY.setPart();
        return (Product) builderY.buildProduct();
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消