前言:
构造一辆汽车,本身汽车的构造是有很多的部件组成,例如,车窗,轮胎,发动机,车架等,在普通的方式生产的的时候, 如果一部车只是因为轮胎有差异,或者其中的部件有差异,就从头开始创建一个新的,那么重复的功能操作会很多,导致累赘;对于我们设计而言,将其中的各个部件分离开来,组成一个产品,这些部件统一由一个控制器去指挥,期间可以指定具体物件创建顺序;需要修改调动的时候就不必全盘去调动;
生成器模式:
1、定义:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程 可以创建不同的表示;
大概就是:生成一系列产品,其中包含各种部件,但是产品之间只是部件内部有差异,那么生成器模式 很适合;
2、基本的组成部分:
(1)builder:创建器(一个接口或者抽象类,用于定义生成各个部件的接口);
public abstract class Builder { protected ProductCar productCar = new ProductCar(); abstract void buildTire(); abstract void buildEngine(); abstract void buildWindow(); public ProductCar getResult() { return productCar; } }
(2)ConcreteBuilder: 具体的创建者;表述这个builder 具体创建的是哪个product;
public class BMWBuilder extends Builder { public void buildTire(){ //开始造轮子 } public void buildEngine(){ //开始造发动机 } public void buildWindow(){ //造窗户 } }
(3)Product : 物品;表示创建器所创建的同一类事物,使用创建器模式的前提是所描述的object 具有大部分相似的组件,之间的差异太大就不适合;
public class ProductCar { //轮胎 private Object tire; //发动机 private Object engine; //车窗 private Object window; }
(4) Director : 控制器,负责各个组件之间的组装;
public class Director { private Builder builder; public Director(Builder builder){ this.builder = builder; } public void setBuilder(Builder builder){ this.builder = builder; } //构建与组装方法 public ProductCar constrct(){ builder.buildTire(); builder.buildEngine(); builder.buildWindow(); return builder.getResult(); } }
以上基本上就是创建性模式的基本构造:
测试实现:
Builder builder = new BMWBuilder(); Director director = new Director(builder); ProductCar car = director.constrct();
创建性模式和 抽象工厂方法模式有些类似;抽象工厂方法是直接从中获取你想要的产品,而创建性模式是有个物品的创建流程;