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

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

发布于 2020-12-10|

复制链接

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

```java

package com.shejimoshi.create.Builder; ..

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

```java

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();

}

```

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

```java

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("画出瘦子的右腿");

}

}

```

```java

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("画出胖子的右腿");

}

}

```

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

```java

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();

}

}

```

测试案例:

```java

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

画出一个瘦子的头

画出一个瘦子的身体

画出瘦子的左臂

画出瘦子的右臂

画出瘦子左腿

画出瘦子的右腿

==============================================================

画出一个胖子的头

画出一个胖子的身体

画出胖子的左臂

画出胖子的右臂

画出胖子左腿

画出胖子的右腿

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值