首页 > 其他 > 详细

大话设计模式----建造者模式

时间:2020-04-05 19:19:53      阅读:63      评论:0      收藏:0      [点我收藏+]

一、建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二、代码示例

public class Product {
    List<String> parts = new ArrayList<>();

    public void addParts(String part){
        parts.add(part);
    }

    public void show(){
        parts.forEach(System.out::println);
    }
}

public interface Builder {

    void builderPartA();

    void builderPartB();

    Product getProduct();
}

public class ConcreteBuilderA implements Builder {

    Product product = new Product();

    public ConcreteBuilderA() {
        System.out.println("======ConcreteBuilderA=====");
    }

    @Override
    public void builderPartA() {
        product.addParts("部件A");
    }

    @Override
    public void builderPartB() {
        product.addParts("部件B");
    }

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

public class ConcreteBuilderB implements Builder {

    Product product = new Product();

    public ConcreteBuilderB() {
        System.out.println("======ConcreteBuilderB=====");
    }

    @Override
    public void builderPartA() {
        product.addParts("部件X");
    }

    @Override
    public void builderPartB() {
        product.addParts("部件Y");
    }

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

public class Director {
    public void initBuilder(Builder builder){
        builder.builderPartA();
        builder.builderPartB();
    }
}

public class Test {

    public static void main(String[] args) {
        Director director = new Director();
        ConcreteBuilderA concreteBuilderA = new ConcreteBuilderA();
        director.initBuilder(concreteBuilderA);
        concreteBuilderA.getProduct().show();

        ConcreteBuilderB concreteBuilderB = new ConcreteBuilderB();
        director.initBuilder(concreteBuilderB);
        concreteBuilderB.getProduct().show();
    }
    /** result
     * ======ConcreteBuilderA=====
     * 部件A
     * 部件B
     * ======ConcreteBuilderB=====
     * 部件X
     * 部件Y
     */
}

三、优势

   使得建造者代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

四、使用场景

  当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

 

大话设计模式----建造者模式

原文:https://www.cnblogs.com/zsmcwp/p/12638353.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!