当前位置:编程学习 > JAVA >>

JAVA设计模式四---Builder(建造者模式)

定义
  将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
实用范围
  1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  2 当构造过程必须允许被构造的对象有不同表示时。
角色
  在这样的设计模式中,有以下几个角色:
  1 builder:为创建一个产品对象的各个部件指定抽象接口。
  2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,
并 提供一个检索产品的接口。
  3 Director:构造一个使用Builder接口的对象。
  4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
如图:


举例如下:
创建超级接口做饭:
[java]
package design.builder; 
 
/**
 * 文件名称:design.singleton.Singleton.java
 * 创建人:Fei Wong
 * 创建时间: 2012-06-20
 * 电子邮箱:www.zzzyk.com
 * 说明:做饭
 * */ 
public interface Cook { 
    /**
     * 淘米的方法
     * */ 
    public void washRice() ; 
     
    /**
     * 煮饭的方法
     * */ 
    public void cookRice() ;   

创建一个会做饭的人:

[java]
package design.builder; 
 
/**
 * 文件名称:design.singleton.Singleton.java
 * 创建人:Fei Wong
 * 创建时间: 2012-06-20
 * 电子邮箱:www.zzzyk.com
 * 说明:这里有 Fei Wong 去做饭
 * */ 
public class FeiWongCook implements Cook { 
 
    @Override 
    public void cookRice() { 
        System.out.println( "Fei Wong cook rice" ); 
    } 
 
    @Override 
    public void washRice() { 
        System.out.println( "Fei Wong wash rice" );  
    } 
     

需要领导者指挥这个人去做饭,这个人才知道做饭的时间到了:

[java]
package design.builder; 
 
 
/**
 * 文件名称:design.singleton.Singleton.java
 * 创建人:Fei Wong
 * 创建时间: 2012-06-20
 * 电子邮箱:www.zzzyk.com
 * 说明:领导者,领导也有做饭的方法,实际上让其他人去做饭了
 * */ 
public class Leadership { 
    private Cook cook = null ; 
     
    public Leadership(Cook cook ) { 
        this.cook = cook;  
    } 
    /**
     * 领导者做饭
     * */ 
    public void cook(){ 
        cook.washRice() ;  
        cook.cookRice() ; 
    } 

创建main方法:
[java]
package design.builder; 
/**
 * 文件名称:design.singleton.Singleton.java
 * 创建人:Fei Wong
 * 创建时间: 2012-06-20
 * 电子邮箱:www.zzzyk.com
 * */ 
 
 
public class Main { 
    public static void main(String[] args) { 
        Cook cook = new FeiWongCook() ; 
        Leadership leadership = new Leadership( cook ) ; 
        /**
         * 这里名义上是 让 领导去做饭,实际是让 Fei Wong去做饭了
         * */ 
        leadership.cook() ; 
    } 

 作者:hfmbook

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,