关于建造者模式的个人理解

Posted 郝二驴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于建造者模式的个人理解相关的知识,希望对你有一定的参考价值。

 

作为创建型的模式,肯定是创建对象等时候用的.

联系到实际,就是一个javaBean 如果想获取一个完整的对象, 需要为属性挨个赋值.

这样如果连续创建多个对象的时候, 重复代码 及代码量明显太多了

这时候就应该抽象出来一个 创建对象的接口,或者抽象类  每一类对象一个实现类.

在创建一个控制类. 里面调用接口的每一个方法, 同时返回创建好的对象. 

 

eg:   手机套餐  多种套餐:   套餐包含 通话时间 和流量

javaBean :  

public Class SJtc {

  String thsj;// 通话时间

  String ll; 流量

  get();

  set();

}

正常如果构建套餐. 直接 Sjtc sjtc = new Sjtc(); sjtc.setThsj()... 这样写 

 

接下来换一个实现方式:

public abstrac class SjcBuilder {

  Sjtc sjtc = new Sjtc();

  abstract void setThsj();

  abstract void setLl();

      getSJtc{

  return this.sjtc;  

}

}

// 具体套餐实现类:

public ASjtc extends SjcBuilder {

  void setThsj(){

  sjtc.setThsj("123123");

  }

  void setLl(){

  sjtc.setLl("123123");

  }  

}

再写一个控制类调用 抽象类所有方法;

puclic class control{

SjcBuilder builder;

public control(buider){

this.builder = builder; 

}

Sjrc getTc(){

 builder.setThsj();

builder.setLl();

return builder;

}

 

}

这样调用的时候 这样就好了  

control control = new control(new ASjtc());

control.getTc();

调用者不用关心 a套餐都需要什么?

 

把抽象类 换成接口是一样的.  创建对象可以放在builde里面.  

但是注意 使用完之后置空

     public void createDoppelganger(String name){
        doppelganger = new Doppelganger(name);
    }

    public Doppelganger getDoppelganger(){
        try {
            return doppelganger; 
        }finally{
            doppelganger = null;
        }
    }

 

 

总体而言 建造者模式 跟工厂模式相比, 多了一个控制类, 用来控制对象的创建. 同时建造者模式 是关注的创建的过程.为了减少中间创建对象代码  

在实际工作中 完全是有利用价值的,但是因为例子中 各个实现类的参数都是已知的. 在实际中可能是变化的, 这样可以在java bean加一个方法.来处理这些,只要规则一置就好了

以上是关于关于建造者模式的个人理解的主要内容,如果未能解决你的问题,请参考以下文章

揭秘设计模式之建造者模式

设计模式-建造者模式JAVA实现

JAVA设计模式:建造者模式原理与代码理解

设计模式总结篇系列:建造者模式(Builder)

设计模式之建造者模式

建造者模式的理解