资讯动态

什么是生成器模式?一文详解

发布时间:2026/10/25 1:33:29 来源:尧图企业网站定制
目录一.意图二.结构三.举例产品套餐1.代码实现①创建“产品”②创建“抽象套餐”③创建“具体套餐1”④创建“具体套餐2”⑤创建“服务员”最终进行测试四.真题1.2017年上半年题目分析过程正确答案2.2018年上半年题目分析过程正确答案一.意图将一个复杂对象的构建与它的表示分离使得同样的构建过程可以创建不同的表示。二.结构三.举例产品套餐1.代码实现①创建“产品”//产品 public class Product { //组成产品的部件材料 ListString parts new ArrayList(); public void add(String part){ parts.add(part); } public void show(){ System.out.println(产品的组成); for(String s : parts){ System.out.print(s ); } System.out.println(\n); } }②创建“抽象套餐”//抽象套餐 public abstract class Builder { public abstract void BuildPart(); public abstract Product getResult(); }③创建“具体套餐1”//具体套餐1 public class Builder1 extends Builder{ //这很关键要将产品放到具体套餐中从而构造产品内容 Product product new Product(); Override public void BuildPart() { product.add(A); product.add(B); product.add(C); product.add(D); } Override public Product getResult() { return product; } }④创建“具体套餐2”//具体套餐2 public class Builder2 extends Builder{ //这很关键要将产品放到具体套餐中从而构造产品内容 Product product new Product(); Override public void BuildPart() { product.add(E); product.add(F); product.add(G); } Override public Product getResult() { return product; } }⑤创建“服务员”//服务员 public class Director { //这是关键这里接收的参数是“抽象套餐Builder”将来要传入具体套餐Builder1 or 具体套餐Builder2 public void Construct(Builder builder){ builder.BuildPart(); } }最终进行测试public class Demo01Application { public static void main(String[] args) { //1.创建服务员 Director director new Director(); //2.创建具体套餐1 Builder builder1 new Builder1(); //3.服务员通知后厨做具体套餐1 director.Construct(builder1); //4.查看具体套餐1的内容 Product product1 builder1.getResult(); product1.show(); //创建具体套餐2 Builder builder2 new Builder2(); //服务员通知后厨做具体套餐2 director.Construct(builder2); //查看具体套餐2的内容 Product product2 builder2.getResult(); product2.show(); } }运行效果如下四.真题1.2017年上半年题目分析过程(1)abstract void buildParts()由于PizzaBuilder是抽象类且第一空的方法没有方法体所以肯定是一个抽象方法因此要用abstract关键字修饰再根据子类的具体实现发现返回值为void、方法名叫buildParts形参列表为空。故第一空的答案是abstract void buildParts()(2)this.pizzaBuilder pizzaBuilder故答案为this.pizzaBuilder pizzaBuilder(3)pizzaBuilder.buildParts()故答案为pizzaBuilder.buildParts()(4)waiter.setPizzaBuilder(hawaiian_pizzabuilder)故答案为waiter.setPizzaBuilder(hawaiian_pizzabuilder)(5)waiter.construct()故答案为waiter.construct()正确答案经过对比发现我们上述的答案全对了。2.2018年上半年题目分析过程(1)(2)根据Builder接口的实现类可以找出缺少的两个方法故第一空的答案void buildPartA()第二空的答案Product getResult()(3)(4)由于第三空和第四空根据方法名可以知道是在给product类的partA和partB两个属性赋值所以要调用Product类的setPartA和setPartB故第三空的答案是product.setPartA第四空的答案是product.setPartB(5)builder.builderPartA()或者builder.builderPartB()故第五空的答案为builder.builderPartA()或者builder.builderPartB()正确答案将我们上述的答案和正确答案对比发现全对了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑