ITPub博客

首页 > IT职业 > IT图书 > 设计模式之建造者模式

设计模式之建造者模式

IT图书 作者:hahadelphi 时间:2021-09-09 09:11:45 0 删除 编辑

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

模板方法模式。也可以不用。
/**
 * 产品接口
 */
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();
    }
}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2471/viewspace-2808525/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-09-01

  • 博文量
    78
  • 访问量
    8407