本文共 2568 字,大约阅读时间需要 8 分钟。
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
让建造过程固定,建造细节可变、所以定义抽象类,固定建造过程。
让具体类去继承抽象类,实现具体类的建造需求。
指挥者指导对象的建造过程,根据用户的选择一步一步构建,隔离用户和建造过程的关联。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hu6zlE0n-1620538693623)(image-20210509110716725.png)]
主要用于创建一些复杂的对象,这些对象的内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
当创建复杂对象的算法(指挥者)应该独立于该对象的组成部分(具体类)以及他们的装配方式(父类)时适用。
好处: 使得建造代码与表示代码分离,因为建造者模式隐藏了产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就好了。
3.1产品类,由多个部件组成
package com.builder;import java.util.ArrayList;import java.util.List;public class Product { //产品类,由多个部件构成 Listparts=new ArrayList (); //添加部件 public void add(String part){ parts.add(part); } //列举所以的部件 public void show(){ System.out.println("产品创建中...."); for (String s:parts){ System.out.println(s); } }}
3.2 Builer类,抽象建造者,确定产品由几个部件构成,并且声明得到产品建造后结果的方法
package com.builder;//抽象建造者类: 确定产品由哪些部件组成,并且声明一个得到产品建造后结果的方法public abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product Getresult();}
3.3 具体建造者类1
package com.builder;//具体建造者类public class ConcreteBuilder1 extends Builder{ private Product product=new Product(); @Override public void BuilderPartA() { product.add("部件A"); } @Override public void BuilderPartB() { product.add("部件B"); } @Override public Product Getresult() { return product; }}
3.4具体建造者类2
package com.builder;public class ConcreteBuilder2 extends Builder{ private Product product=new Product(); @Override public void BuilderPartA() { product.add("部件X"); } @Override public void BuilderPartB() { product.add("部件Y"); } @Override public Product Getresult() { return product; }}
3.5指挥者类
package com.builder;//指挥者类public class Director { public void Construct(Builder builder){ builder.BuilderPartA(); builder.BuilderPartB(); }}
3.6客户端类
package com.builder;//客户端不需知道具体的建造过程public class Client { public static void main(String[] args) { Director director=new Director(); Builder b1=new ConcreteBuilder1(); Builder b2=new ConcreteBuilder2(); director.Construct(b1); Product p1=b1.Getresult(); p1.show(); director.Construct(b2); Product p2=b2.Getresult(); p2.show(); }}
3.6 运行结果
产品创建中....部件A部件B产品创建中....部件X部件Y
转载地址:http://bvfdi.baihongyu.com/