天天看點

構造者模式(Builder)

定義

  将一個複雜對象的構造與它的表示分離,使同樣的建構過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。

實用範圍

  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;

  Dirictor

  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 {

  Test

  public class Test{

  public static void main(String[] args) {

  PersonDirector pd = new PersonDirector();

  Person person = pd.constructPerson(new ManBuilder());

  System.out.println(person.getBody());

  System.out.println(person.getFoot());

  System.out.println(person.getHead());

  result

  建造男人的身體

  建造男人的腳

  建造男人的頭

繼續閱讀