设计模式之建造者模式

2018-12-27  本文已影响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的头脑

新的身体

新的手

新的脚

上一篇 下一篇

猜你喜欢

热点阅读