zoukankan      html  css  js  c++  java
  • 关于建造者模式的个人理解

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

    联系到实际,就是一个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的第32天
    疯狂学java的第31天
    疯狂学java的第30天
    疯狂学java的第29天
    疯狂学java的第28天
    javaSE_day14_抽象类
    javaSE_day13_继承、super、this
    JavaSE_day12_static关键字丶单列设计模式丶代码块
    JavaSE_day11_常用类(String类丶StringBuffer类丶StringBuilder类)
    JavaSE_day10_初识API丶常用类(Scanner丶Random丶ArrayList)
  • 原文地址:https://www.cnblogs.com/haoerlv/p/7526611.html
Copyright © 2011-2022 走看看