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

来源:互联网 发布:听唱戏的软件 编辑:程序博客网 时间:2024/06/04 20:14

 一、建造者模式

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

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
原创粉丝点击