设计模式:生成器模式

前言:

构造一辆汽车,本身汽车的构造是有很多的部件组成,例如,车窗,轮胎,发动机,车架等,在普通的方式生产的的时候, 如果一部车只是因为轮胎有差异,或者其中的部件有差异,就从头开始创建一个新的,那么重复的功能操作会很多,导致累赘;对于我们设计而言,将其中的各个部件分离开来,组成一个产品,这些部件统一由一个控制器去指挥,期间可以指定具体物件创建顺序;需要修改调动的时候就不必全盘去调动;

生成器模式:

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();

创建性模式和 抽象工厂方法模式有些类似;抽象工厂方法是直接从中获取你想要的产品,而创建性模式是有个物品的创建流程;

 

转载于:https://my.oschina.net/u/3300098/blog/1587592

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值