美文网首页
设计模式---Builder模式

设计模式---Builder模式

作者: From64KB | 来源:发表于2018-06-20 09:39 被阅读39次

    个人感觉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

    相关文章

      网友评论

          本文标题:设计模式---Builder模式

          本文链接:https://www.haomeiwen.com/subject/gxwjeftx.html