大话设计模式读后感之建造者模式(JAVA)

 一、建造者模式

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

JDK中使用到

• java.lang.StringBuilder#append()

• java.lang.StringBuffer#append()

• java.nio.ByteBuffer#put() (CharBuffer, ShortBuffer, IntBuffer,LongBuffer, FloatBuffer DoubleBuffer与之类似)

• javax.swing.GroupLayout.Group#addComponent()

• java.sql.PreparedStatement

• java.lang.Appendable的所有实现类


简单的建造者模式

产品类

import java.util.ArrayList;
import java.util.List;

/**
 * Created with Intellij IDEA.
 * User : Yebinghuan
 * Created on 2017/8/15.
 * Description :
 *  产品类:由多个部件组成
 */
public class Product {

    List<String> parts=new ArrayList<String>();

    //添加产品部件
    public void Add(String part){
        parts.add(part);
    }

    public void show(){
        System.err.println("产品创建-----");
        parts.forEach(System.out::println);//lambda表达式 java8新特性
    }
}


定义一个建造者模型类

/**
 * Created with Intellij IDEA.
 * User : Yebinghuan
 * Created on 2017/8/15.
 * Description :
 *    Builder类:抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后的结果集
 */
public abstract class Builder {
    //零件A
    public abstract void PartA();

    //零件B
    public abstract void PartB();

    public abstract Product GeteResult();
}

零件一
/**
 * Created with Intellij IDEA.
 * User : Yebinghuan
 * Created on 2017/8/15.
 * Description :
 *  产品1
 */
public class ConcreteBuilderOne extends Builder {

    Product parts=new Product();

    @Override
    public void PartA() {
        parts.Add("水泥");
    }

    @Override
    public void PartB() {
        parts.Add("水");
    }

    @Override
    public Product GeteResult() {
        return parts;
    }
}

零件2

/**
 * Created with Intellij IDEA.
 * User : Yebinghuan
 * Created on 2017/8/15.
 * Description :
 *  产品2
 */
public class ConcreteBuilderTwo  extends Builder{

    Product parts=new Product();
    @Override
    public void PartA() {
        parts.Add("混泥土");
    }

    @Override
    public void PartB() {
        parts.Add("鸟头");
    }

    @Override
    public Product GeteResult() {
        return parts;
    }
}

创建一个装配类

/**
 * Created with Intellij IDEA.
 * User : Yebinghuan
 * Created on 2017/8/15.
 * Description :
 *  指挥类
 */
public class Director {


    public  void Construct(Builder builder){
        builder.PartA();
        builder.PartB();
    }
}


MAIN

public class Main {

    public static void main(String[] args) {

     Director director=new Director();
     Builder builderOne=new ConcreteBuilderOne();//产品一
     Builder builderTwo=new ConcreteBuilderTwo();//产品二

     director.Construct(builderOne);//组合成一个产品1
     Product product=builderOne.GeteResult();
     product.show();

     director.Construct(builderTwo);

     product=builderTwo.GeteResult();

     product.show();
    }
}


建造者模式分析

1、建造者模式可以让客户端不必知道产品内部如何装配;
2、 具体的建造者类之间都是相互独立的,增加了扩展性。

使用场景

已经知道要创建对象的基本固定轮廓,但是对象的内部组成构件又可能会有复杂的变化时使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值