美文网首页
设计模式之建造者模式

设计模式之建造者模式

作者: 代码之尖 | 来源:发表于2018-12-27 12:31 被阅读0次

    英文:Builder

    对于建造者模式而已,它主要是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。适用于那些产品对象的内部结构比较复杂。

    建造者模式将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过程,同时它隔离了复杂产品对象的创建和使用,使得相同的创建过程能够创建不同的产品。但是如果某个产品的内部结构过于复杂,将会导致整个系统变得非常庞大,不利于控制,同时若几个产品之间存在较大的差异,则不适用建造者模式,毕竟这个世界上存在相同点大的两个产品并不是很多,所以它的使用范围有限。

          其UML结构图:

    //机器人的类

    public class Robot{

           private String head;

           private String body;

           private String hand;

           private String foot;

    }

    只要是人都是这个类出来的。


    //一个定义了造机器人标准的接口。

    public interface IBuildHuman {

        public void buildHead();

        public void buildBody();

        public void buildHand();

        public void buildFoot();

        public Robot createRobot();

    }

    一个接口定义好了。有各种造部位的方法,最后给个createRobot方法给你返回一个我们想要造的机器人。

    public class SmartManBuilder implements IBuildHuman {

        Robot robot;

        public SmartManBuilder(){

            robot = new Robot();

        } 

        @Override

        public void buildHead() {

              robot.setHead("智商180的头脑");

          }

         @Override

         public void buildBody() {

              robot.setBody("新的身体");

         }

       @Override

        public void buildHand() {

               robot.setHand("新的手");

         }

         @Override

         public void buildFoot() {

            robot.setFoot("新的脚");

         }

       @Override

       public Robot createRobot() {

           return robot;

       }

    }

     这个高智商的造机器人过程自然是实现了IBuildRobot这个造机器人标准的接口了


    接下来,就是介绍建造者模式的精髓,那就是director。这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:

    public class Director {

             public Human createRobotByDirector(IBuildRobot bh){

                    bh.buildBody();

                   bh.buildFoot();

                   bh.buildHand();

                   bh.buildHead();

                   return bh.createRobot();

           }

    }

    这个director类呢,重点在于createRobotByDirector的参数是我们的造人标准的接口。这样一来,只要是实现了我们的这个接口的类,就都可以作为参数,我们刚刚不是造了一个高智商的人吗?那我们如果想造一个身体运动能力出色的人,也就是运动员,这个director也可以启动这个造人过程,只要我们把这个运动员的类先写好。我们来看看director是如何发挥的:

    public class BuilderTest {

      public static void main(String[] args){

          Director director = new Director();

          Robot robot = director.createRobotByDirector(new SmartManBuilder());

          System.out.println(robot.getHead());

          System.out.println(robot.getBody());

          System.out.println(robot.getHand());

          System.out.println(robot.getFoot());

       }

    }

    输出结果为

    智商180的头脑

    新的身体

    新的手

    新的脚

    相关文章

      网友评论

          本文标题:设计模式之建造者模式

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