设计模式---Builder模式

0.115字数 394阅读 64

个人感觉Builder模式是继单例模式后,最好理解也最好写的设计模式了。

1.1 Builder模式介绍

Builder模式是一步一步的创建一个复杂对象的创建模式。将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示

1.2 UML类图
image.png

Builder模式的使用场景:
1) 相同的方法,不同的执行顺序产生不同的结果
2) 初始化一个对象特别复杂,参数很多,而且这些参数都有默认值的时候。

1.3 Builder模式示例

Builder是如此的简单以至于直接举个例子就能明白。就拿组装电脑(Computer)举例子吧,如果要去电脑城买一台组装电脑,那么大概需要CPU、主板、硬盘这个大件。

  1. 第一步定义需要哪些东西组成:
public  abstract class Builder {  

    //第一步:装CPU
    //声明为抽象方法,具体由子类实现 
    public abstract void  BuildCPU();

    //第二步:装主板
    //声明为抽象方法,具体由子类实现 
    public abstract void BuildMainboard();

    //第三步:装硬盘
    //声明为抽象方法,具体由子类实现 
    public abstract void BuildHD();

    //返回产品的方法:获得组装好的电脑
    public abstract Computer GetComputer();
}
  1. 第二步定义如何组装这些东西:
public class Director{
    //指挥装机人员组装电脑
    public void Construct(Builder builder){
                       builder. BuildCPU();
                       builder.BuildMainboard();
                       builder. BuildHD();
                      }
 }
  1. 第三部开始组装:
  public class ConcreteBuilder extend  Builder{
    //创建产品实例
    Computer computer = new Computer();

    //组装产品
    @Override
    public void  BuildCPU(){  
       computer.Add("组装CPU")
    }  

    @Override
    public void  BuildMainboard(){  
       computer.Add("组装主板")
    }  

    @Override
    public void  BuildHD(){  
       computer.Add("组装主板")
    }  

    //返回组装成功的电脑
     @Override
      public  Computer GetComputer(){  
      return computer
    }  
}
  1. 将上面的流程组合起来
public class Builder Pattern{
  public static void main(String[] args){

//逛了很久终于发现一家合适的电脑店
//找到该店的老板和装机人员
  Director director = new Director();
  Builder builder = new ConcreteBuilder();

//沟通需求后,老板叫装机人员去装电脑
director.Construct(builder);

//装完后,组装人员搬来组装好的电脑
Computer computer = builder.GetComputer();
//组装人员展示电脑给小成看
computer.Show();

    }

}

如果在BuilderbuildCPU()/buildHD()等方法中返回Builder本身还可以实现链式调用,进一步简化代码。在Director中可以这样写:

public class Director{
    //指挥装机人员组装电脑
    public void Construct(Builder builder){
                       builder. BuildCPU();
                                 .BuildMainboard();
                                 . BuildHD();
                      }
 }

这样就讲完了Builder模式,还是非常好理解的。优点在于能够精确地控制对象的参数,缺点也在于参数多的话,代码会非常长。

参考文章:https://blog.csdn.net/carson_ho/article/details/54910597

推荐阅读更多精彩内容