设计模式之建造者模式

英文: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的头脑

新的身体

新的手

新的脚

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的博客地址 建造者模式 主要参考了 /冰鉴/ 的一篇博客,觉得写的很详细,然后自己敲了一遍。学习了 设计模式之建...
    下位子阅读 478评论 2 6
  • 建造者模式:将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示 使用建造者模式,客户端只需要...
    超级大鸡腿阅读 213评论 0 0
  • 观察者模式 基本含义 顾名思义就是一个观察者角色 观察 被观察角色的变化 这是一种一对多的对象关系 其目的是 是编...
    nade_s阅读 333评论 0 1
  • 朱新建说技巧可以训练,但作品深度限于思想。之前我深以为然,但最近我读《1984》,书中有政府限制文字,从而限制思想...
    罗纬阅读 221评论 0 0
  • 26. 设计模式是什么?你知道哪些设计模式,并简要叙述。 - 单例模式:通过static关键词,声明全局变量。在整...
    烟雨平生花飞舞阅读 154评论 0 0