生成器模式
1.定义
将复杂对象的构件和它的表示分离,使得同样的构建过程可以创建不同的表示。
2.示例代码
要实现同样的构建过程可以创建不同的表现,那么一个自然的思路就是先把构建过程独立出来,在生成器模式中把它称为指导者,由它来指导装配过程,但是不负责每步具体实现,具体实现每步的对象,在生成器模式中称为生成器。
/*被构件的产品对象接口*/ public interface Product{ //产品对象的一些操作 public String getProductName(); } /*产品对象鞋子*/ public class Shoes implements Product{ //产品对象的一些操作 public String getProductName(){ System.out.println("产品:" + "Shoes"); } } /*产品对象衣服*/ public class Clothes implements Product{ //产品对象的一些操作 public String getProductName(){ System.out.println("产品:" + "Clothes"); } }
/*生成器接口,定义创建Product对象所需的各个部件的操作方法*/ public interface Bulider{ //示意方法,构件某个部件 public void buildPart(); } /*鞋子具体生成器实现对象*/ public class ShoesBuilder implements Bulider{ //生成器最终构建的产品对象 private Product resultProduct; //获取生成器最终构建的产品对象 public Product getResult(){ return resultProduct; } //构建具体产品的详细步骤 public void buildPart(){ //构建某个部件的功能处理 resultProduct = new Shoes(); } } /*衣服具体生成器实现对象*/ public class ChothesBuilder implements Bulider{ //生成器最终构建的产品对象 private Product resultProduct; //获取生成器最终构建的产品对象 public Product getResult(){ return resultProduct; } //构建具体产品的详细步骤 public void buildPart(){ //构建某个部件的功能处理 resultProduct = new Chothes(); } }
/*指导者使用生成器接口来构建产品对象*/ public class Director{ //持有当前生成器对象 private Builder builder; //构造方法传入生成器对象 public Director(Builder builder){ this.builder = builder; } //指导生成器构建最终的产品对象 public void construct(){ builder.buildPart(); } }
/*客户调用生成器生成不同的产品*/ public class Client{ public static void main(String args[]){ //创建要生产的产品生成器 Builder builder = new ShoesBuilder(); //创建指导对象 Director director = new Director(builder); //生产产品 director.construct(); builder.getResult().getProductName(); } }
3.实际应用
生成器模式主要功能是构建复杂产品,而且是细化的,分步骤的构建产品,更为重要的是,这个构建的过程是统一的,固定不变的,变化的部分放到生成器里边,只需要配置不同的生成器,那么同样的构建过程就能构建出不同的产品。
生成器模式的本质:分离整体构建算法和部件构造