java设计模式之建造者模式

本文属于23种设计模式系列。 介绍的是建造者模式。

大家好,又见面了,我是全栈君。

本文继续介绍
23种设计模式系列
之建造者模式。


定义:
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实用范围
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同表示时。

角色
在这样的设计模式中,有以下几个角色:
1、Builder:为创建一个产品对象的各个部件指定抽象接口。
2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3、Director:构造一个使用Builder接口的对象,指导构建过程。
4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

角色Builder:
public interface PersonBuilder {
     void buildHead();
     void buildBody();
     void buildFoot();
     Person buildPerson();
}

角色ConcreteBuilder:

public class ManBuilder implements PersonBuilder {
     Person person;
     public ManBuilder() {
          person = new Man();
     }
     public void buildbody() {
          person.setBody("建造男人的身体");
     }
     public void buildFoot() {
          person.setFoot("建造男人的脚");
     }
     public void buildHead() {
          person.setHead("建造男人的头");
     }
     public Person buildPerson() {
          return person;
     }
}

角色ConcreteBuilder:

public class WomanBuilder implements PersonBuilder {
     Person person;
     public WomanBuilder() {
          person = new Woman();
     }
     public void buildbody() {
          person.setBody(“建造女人的身体");
     }
     public void buildFoot() {
          person.setFoot(“建造女人的脚");
     }
     public void buildHead() {
          person.setHead(“建造女人的头");
     }
     public Person buildPerson() {
          return person;
     }
}

角色Director:
public class PersonDirector {
     public Person constructPerson(PersonBuilder pb) {
          pb.buildHead();
          pb.buildBody();
          pb.buildFoot();
          return pb.buildPerson();
     }
}

角色Product:
public class Person {     private String head;     private String body;     private String foot;     public String getHead() {          return head;     }     public void setHead(String head) {          this.head = head;     }     public String getBody() {          return body;     }     public void setBody(String body) {          this.body = body;     }     public String getFoot() {          return foot;     }     public void setFoot(String foot) {          this.foot = foot;     }}public class Man extends Person {     public Man(){          System.out.println(“开始建造男人");     }}public class Woman extends Person {     public Woman(){          System.out.println(“开始建造女人");     }}

测试:
public class Test{     public static void main(String[] args) {          PersonDirector pd = new PersonDirector();          Person womanPerson = pd.constructPerson(new ManBuilder());          Person manPerson = pd.constructPerson(new WomanBuilder());     }}

建造者模式在使用过程中可以演化出多种形式:
如果具体的被建造对象只有一个的话,可以省略抽象的Builder和Director,让ConcreteBuilder自己扮演指导者和建造者双重角色,甚至ConcreteBuilder也可以放到Product里面实现。
在《Effective Java》书中第二条,就提到“遇到多个构造器参数时要考虑用构建器”,其实这里的构建器就属于建造者模式,只是里面把四个角色都放到具体产品里面了。

上面例子如果只制造男人,演化后如下:
public class Man {     private String head;     private String body;     private String foot;     public String getHead() {          return head;     }     public void setHead(String head) {          this.head = head;     }     public String getBody() {          return body;     }     public void setBody(String body) {          this.body = body;     }     public String getFoot() {          return foot;     }     public void setFoot(String foot) {          this.foot = foot;     }}

public class ManBuilder{     Man man;     public ManBuilder() {          man = new Man();     }     public void buildbody() {          man.setBody("建造男人的身体");     }     public void buildFoot() {          man.setFoot("建造男人的脚");     }     public void buildHead() {          man.setHead("建造男人的头");     }     public Man builderMan() {          buildHead();          buildBody();          buildFoot();          return man;     }}

测试:
public class Test{     public static void main(String[] args) {          ManBuilder builder = new ManBuilder();          Man man = builder.builderMan();     }}

更多设计模式:
23种设计模式系列

作者:jason0539

博客:http://blog.csdn.net/jason0539(转载请说明出处)

扫码关注我微信公众号

java设计模式之建造者模式




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121326.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件架构 设计模式_几种常见软件架构

    软件架构 设计模式_几种常见软件架构什么是架构?  软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。  ANSI/IEEE610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。  MaryShaw和DavidGarlan认为软件体系结构是软件设

    2022年10月18日
    0
  • Java设计模式之行为型:责任链模式

    Java设计模式之行为型:责任链模式

    2021年10月4日
    46
  • 四、单例模式—不要冒充我,我只有一个! #和设计模式一起旅行#

    单例模式—不要冒充我! 我就是我 是颜色不一样的烟火 天空开阔 要做最坚强的泡沫。——《我就是我》-张国荣有人冒充我给大家说一个秘密了,其实我和设计模式本来并不认识,是相识于网络上,我们聊的很多,聊人生聊梦想,有一天我突然说,设计模式我们一起去旅行吧,她说可以啊!所以才有着一次的旅行。但是总有一些人想要冒充我,因为他们看到了我和设计模式的这场旅行,那么怎么保证“设计…

    2022年2月27日
    49
  • Java设计模式之行为型:解释器模式

    Java设计模式之行为型:解释器模式

    2021年10月4日
    36
  • 设计模式(一)工厂模式Factory(创建型)

    设计模式(一)工厂模式Factory(创建型)设计模式一工厂模式Factory在面向对象编程中,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下,new操作符直接生成对象会带来一些问题。举例来说,许多类型对象的创造需要一系列的步骤:你可能需要计算或取得对象的初始设置;选择生成哪个子对象实例;或在生成你需要的对象之前必须先生成一些辅助功能的对象。在这些………

    2022年7月20日
    18
  • 23种常用设计模式的UML类图

    23种常用设计模式的UML类图23种常用设计模式的UML类图本文UML类图参考《HeadFirst设计模式》(源码)与《设计模式:可复用面向对象软件的基础》(源码)两书中介绍的设计模式与UML图。整理常用设计模式的类图,一

    2022年6月30日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号