大话设计模式读后感之建造者模式(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、 具体的建造者类之间都是相互独立的,增加了扩展性。
使用场景
已经知道要创建对象的基本固定轮廓,但是对象的内部组成构件又可能会有复杂的变化时使用。
下一篇:
java设计模式之工厂模式