理解java设计模式之建造者模式

所属分类: 软件编程 / java 阅读数: 54
收藏 0 赞 0 分享

建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。

package com.shejimoshi.create.Builder;
/**
 * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
 *     适用性:
 *       当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
 *       当构造过程必须允许被构造的对象有不同的表示时
 */
public abstract class PersonBuilder
{
  //绘画一个人物需要使用到的工具
  protected String tool1;
  protected String tool2;
  
  public PersonBuilder(String t1, String t2)
  {
    this.tool1 = t1;
    this.tool2 = t2;
  }
  
  //绘画头
  public abstract void buildHead();
  //画身体
  public abstract void buildBody();
  //画左脚右脚
  public abstract void buildArmLeft();
  public abstract void buildArmRight();
  //画左手右手
  public abstract void buildLegLeft();
  public abstract void buildLegRight();
}

我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型

package com.shejimoshi.create.Builder;


/**
 * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
 *     适用性:
 *       当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
 *       当构造过程必须允许被构造的对象有不同的表示时
 */
public class PersonThinBuilder extends PersonBuilder
{

  public PersonThinBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("画出一个瘦子的头");
  }

  @Override
  public void buildBody()
  {
    System.out.println("画出一个瘦子的身体");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("画出瘦子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("画出瘦子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("画出瘦子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("画出瘦子的右腿");
  }

}

package com.shejimoshi.create.Builder;


/**
 * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
 * 适用性:
 *    当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
 *    当构造过程必须允许被构造的对象有不同的表示时
 */
public class PersonFatBuilder extends PersonBuilder
{

  public PersonFatBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("画出一个胖子的头");
  }

  @Override
  public void buildBody()
  {
    System.out.println("画出一个胖子的身体");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("画出胖子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("画出胖子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("画出胖子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("画出胖子的右腿");
  }

}

我们的生成器交给指挥者来实现创建的动作

package com.shejimoshi.create.Builder;


/**
 * 功能:创建人物的指挥者
 */
public class PersonDirector
{
  private PersonBuilder pb;
  
  //传递相应的人物创建模型
  public PersonDirector(PersonBuilder pber)
  {
    this.pb = pber;
  }
  
  //创建一个人
  public void createPerson()
  {
    pb.buildHead();
    pb.buildBody();
    pb.buildArmLeft();
    pb.buildArmRight();
    pb.buildLegLeft();
    pb.buildLegRight();
  }
}

测试案例:

package com.shejimoshi.create.Builder;


/**
 * 功能:客户端程序
 */
public class Test
{
  //创建相应的人物
  public static void create(PersonBuilder pb)
  {
    //借助参数传过来的模型创建相应的对象
    PersonDirector pd = new PersonDirector(pb);
    pd.createPerson();
  }
  
  public static void main(String []args)
  {
    PersonThinBuilder ptb = new PersonThinBuilder("图像工具", "画笔");
    create(ptb); //创建一个瘦子
    System.out.println("==============================================================");
    PersonFatBuilder pfb = new PersonFatBuilder("图像工具", "画笔");
    create(pfb);
  }
}

运行结果:

画出一个瘦子的头
画出一个瘦子的身体
画出瘦子的左臂
画出瘦子的右臂
画出瘦子左腿
画出瘦子的右腿
==============================================================
画出一个胖子的头
画出一个胖子的身体
画出胖子的左臂
画出胖子的右臂
画出胖子左腿
画出胖子的右腿

以上就是java建造者模式,希望对大家学习java程序设计有所帮助。

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多