设计模式——建造者模式(BuilderPattern)

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

UML图:

设计模式——建造者模式(BuilderPattern)

Builder:

package com.cnblog.clarck;

/**
 * 抽象建造者,确定产品有两个部分A和B组成,并声明一个得到产品组合后得到结果的方法getResult.
 * 
 * @author clarck
 * 
 */
public abstract class Builder {
    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract Product getResult();
}

Director:

package com.cnblog.clarck;

/**
 * 指挥者
 * 
 * @author clarck
 * 
 */
public class Director {
    public void Construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}

Product:

package com.cnblog.clarck;

import java.util.ArrayList;
import java.util.List;

/**
 * 产品类,由多个部分组成
 * 
 * @author clarck
 * 
 */
public class Product {
    private List<String> parts = new ArrayList<String>();

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println("产品 创建--");
        for (String part : parts) {
            System.out.println(part);
        }
    }
}

ConcrateBuilder1:

package com.cnblog.clarck;

/**
 * 具体建造者
 * 
 * @author clarck
 * 
 */
public class ConcrateBuilder1 extends Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.add("部件A");
    }

    @Override
    public void buildPartB() {
        product.add("部件B");
    }

    @Override
    public Product getResult() {
        return product;
    }

}

ConcrateBuilder2:

package com.cnblog.clarck;

public class ConcrateBuilder2 extends Builder {
    private Product product = new Product();
    
    @Override
    public void buildPartA() {
        product.add("部件X");
    }

    @Override
    public void buildPartB() {
        product.add("部件Y");
    }

    @Override
    public Product getResult() {
        return product;
    }

}

Client:

package com.cnblog.clarck;

/**
 * 测试类
 * 
 * @author clarck
 * 
 */
public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builder1 = new ConcrateBuilder1();
        Builder builder2 = new ConcrateBuilder2();

        director.Construct(builder1);
        Product product1 = builder1.getResult();
        product1.show();

        director.Construct(builder2);
        Product product2 = builder2.getResult();
        product2.show();
    }
}

 

更多相关文章
  • 


    		    极速理解设计模式系列:1.建造者模式(Builder Pattern)
    4个角色:指挥者(Director),建造者(Builder),具体建造者(ConcreteBuilder),产品(Product) 产品:需要创建的对象产品 具体建造者:创建产品的实例并且实现建造者多个方法对产品进行装配 建造者:本质为抽象类,里面的抽象方法供具体建造者重写,声明产品的引用 指挥者 ...
  • .NET設計模式 第二部分 創建型模式(3)—建造者模式(Builder Pattern)
    建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起
  • 


    		    .NET設計模式(4):建造者模式(Builder Pattern)
    建造者模式(Builder Pattern) --.NET设计模式系列之四 Terryle
  • 返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC何尝不是,我们的MVVM又何尝不是呢,我们做软件的,换肤是常有的事,其实换肤的实现不就是建 ...
  • C#設計模式(5)——建造者模式(Builder Pattern)
    一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU.主板.硬盘.显卡.机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采
  • 原iOS設計模式之:建造者模式Builder Pattern,用于改進初始化參數
    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式,虽然这句话有点拗口!我希望我们都能宏观地看待某个设计模式,不必去太可以追求概念上的东西.事实上,只要
  • Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道
  • 設計模式學習之建造者模式(Builder,創建型模式)(6)
    假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人幫我们造房子 第一
一周排行