`

创建型模式--建造者模式(Builder)

阅读更多

 

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。我们看一下代码:

还和前面一样,一个Sender接口,两个实现类MailSender和SmsSender。最后,建造者类如下:

[java] view plaincopy
  1. public interface Sender {  
  2.     public void Send();  
  3. }  

其次,创建实现类:

[java] view plaincopy
  1. public class MailSender implements Sender {  
  2.     @Override  
  3.     public void Send() {  
  4.         System.out.println("this is mailsender!");  
  5.     }  
  6. }  
[java] view plaincopy
  1. public class SmsSender implements Sender {  
  2.   
  3.     @Override  
  4.     public void Send() {  
  5.         System.out.println("this is sms sender!");  
  6.     }  
  7. }  
[java] view plaincopy
  1. public class Builder {  
  2.       
  3.     private List<Sender> list = new ArrayList<Sender>();  
  4.       
  5.     public void produceMailSender(int count){  
  6.         for(int i=0; i<count; i++){  
  7.             list.add(new MailSender());  
  8.         }  
  9.     }  
  10.       
  11.     public void produceSmsSender(int count){  
  12.         for(int i=0; i<count; i++){  
  13.             list.add(new SmsSender());  
  14.         }  
  15.     }  
  16. }  

测试类:

[java] view plaincopy
  1. public class Test {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Builder builder = new Builder();  
  5.         builder.produceMailSender(10);  
  6.     }  
  7. }  

从这点看出,建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。因此,是选择工厂模式还是建造者模式,依实际情况而定。

 

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

 

Builder:
主要用来简化一个复杂的对象的创建。这个模式也可以用来实现一个 Fluent Interface。
java.lang.StringBuilder#append()
java.lang.StringBuffer#append()
java.sql.PreparedStatement
javax.swing.GroupLayout.Group#addComponent()
abstract class Glass{  
}  
class AmericanGlass extends Glass{  
    public String toString(){  
        return "\"American Glass\" ";  
    }  
}  
class JapaneseGlass extends Glass{  
    public String toString(){  
        return "\"Japanese Glass\" ";  
    }  
}  
  
/** 
 * 定义部件wheel的抽象类Wheel 
 * 和两个具体类AmericanWheel、JapaneseWheel 
 */  
abstract class Wheel{  
}  
class AmericanWheel extends Wheel{  
    public String toString(){  
        return "\"American Wheel\" ";  
    }  
}  
class JapaneseWheel extends Wheel{  
    public String toString(){  
        return "\"Japanese Wheel\" ";  
    }  
}  
  
/** 
 * 定义部件engine的抽象类Engine 
 * 和两个具体类ChineseEngine、FranceEngine 
 */  
abstract class Engine{  
}  
class ChineseEngine extends Engine{  
    public String toString(){  
        return "\"Chinese Engine\" ";  
    }  
}  
class FranceEngine extends Engine{  
    public String toString(){      
        return "\"France Engine\" ";  
    }  
}  
  
/** 
 * 定义产品类Car 
 */  
class Car{  
    Glass glass;  
    Wheel wheel;  
    Engine engine;  
}  
/** 
 * 定义抽象建造器接口Builder 
 */  
  
interface CarBuilder{  
    public void buildGlass();  
    public void buildWheel();  
    public void buildEngine();  
    public Car getProduct();  
}  
  
/** 
 * 具体建造器类CarABuilder 
 * CarA=AmericanGlass+JapaneseWheel+ChineseEngine 
 */  
class CarABuilder implements CarBuilder{  
    private Car product=null;  
    public CarABuilder(){  
        product=new Car();  
    }  
    /** 
     * 将建造部件的工作封装在getProduct()操作中,主要是为了向客户隐藏实现细节 
     * 这样,具体建造类同时又起到了一个director的作用 
     */  
    @Override  
    public void buildEngine() {  
        // TODO Auto-generated method stub  
        product.engine=new ChineseEngine();  
    }  
    @Override  
    public void buildGlass() {  
        // TODO Auto-generated method stub  
        product.glass=new AmericanGlass();  
    }  
    @Override  
    public void buildWheel() {  
        // TODO Auto-generated method stub  
        product.wheel=new JapaneseWheel();  
    }  
    @Override  
    public Car getProduct() {  
        // TODO Auto-generated method stub  
        buildGlass();  
        buildWheel();  
        buildEngine();  
        return product;  
    }  
}  
/** 
 * 具体建造器类CarABuilder 
 * CarB=JapaneseGlass+AmericanWheel+FranceEngine 
 */  
class CarBBuilder implements CarBuilder{  
    private Car product;  
    public CarBBuilder(){  
        product=new Car();  
    }  
    /** 
     * 将建造部件的工作封装在getProduct()操作中,主要是为了向客户隐藏实现细节 
     * 这样,具体建造类同时又起到了一个director的作用 
     */  
    @Override  
    public void buildEngine() {  
        // TODO Auto-generated method stub  
        product.engine=new FranceEngine();  
    }  
    @Override  
    public void buildGlass() {  
        // TODO Auto-generated method stub  
        product.glass=new JapaneseGlass();  
    }  
    @Override  
    public void buildWheel() {  
        // TODO Auto-generated method stub  
        product.wheel=new AmericanWheel();  
    }  
    @Override  
    public Car getProduct() {  
        // TODO Auto-generated method stub  
        buildGlass();  
        buildWheel();  
        buildEngine();  
        return product;  
    }  
}  
class Director{  
    private CarBuilder builder;   
    public Director(CarBuilder builder) {   
        this.builder = builder;   
    }  
    public Car construct() {   
        return builder.getProduct();  
    }   
}  
/** 
 * 客户端代码,使用Director创建两种不同型别的CarA和CarB 
 */  
public class test{  
    public static void main(String[] args){  
        Car carA,        CarBuilder builderA = new CarABuilder();  
        CarBuilder builderB = new CarBBuilder();  
        Director director;  
        director = new Director(builderA);  
        carA=director.construct();  
        director = new Director(builderB);  
        carB=director.construct();  
        System.out.println("Car A is made by:"+carA.glass+carA.wheel+carA.engine);  
        System.out.println("Car B is made by:"+carB.glass+carB.wheel+carB.engine);  
    }  
}  
 



分享到:
评论

相关推荐

    c++设计模式-创建型模式-建造者模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露构建过程。在C++中,这种模式常用于将对象的创建过程与使用过程分离,使得对象的构建更加灵活,...

    设计模式 创建型模式 Builder模式(建造者)

    明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,...

    设计模式专题之(四)建造者模式---设计模式建造者模式示例代码(python--c++)

    建造者模式是一种结构型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式在软件工程中被广泛应用,尤其是在需要构建对象的过程复杂且需要保持构建过程与对象表现分离的...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    设计模式-Builder模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    设计模式-建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离,使得同样的构建过程可以创建不同的表示。这种模式经常在对象的构造过程中需要进行多种选择...

    [创建型模式]设计模式之建造者模式(Builder Pattern)

    【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...

    Java 设计模式-建造者模式(Builder)Android讲解

    建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...

    设计模式C++学习之建造者模式(Builder)

    建造者模式(Builder)是设计模式中的一种结构型模式,它允许我们分步骤构建复杂的对象,而无需暴露构造过程。这种模式将构造过程与对象的表示分离,使得同样的构造过程可以创建不同的表示。在C++中,建造者模式通常...

    C#设计模式之建造者(Builder)模式示例源代码

    其中,建造者模式属于创建型模式,主要用于解决构建复杂对象的问题。 ### 建造者模式解析 建造者模式的核心思想是将一个复杂的对象分解为多个简单的组成部分,然后通过一个构建者来组装这些部分。这样做的好处是...

    (创建型模式)Builder模式

    Builder模式是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式在程序开发中常用于构造产品对象,尤其是当对象的构造过程较为复杂时,Builder模式能够帮助我们更好地...

    4.设计模式-建造者模式1

    今天,我们将讨论创建型模式中的一种模式,即建造者模式。 建造者模式的定义是将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式可以很好地解决一些复杂对象的创建问题,例如,...

    c++-设计模式之“建造者模式(Builder)”

    建造者模式(Builder Pattern)是一种创建型设计模式,允许使用多个简单的对象一步一步构建一个复杂的对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的组成 产品...

    java设计模式-建造者模式(Builder Pattern)

    在Java中,建造者模式(Builder Pattern)是一种创建型设计模式,它允许你分步骤地构建一个复杂对象。这个模式通过将构建过程和表示过程分离,使得同样的构建过程可以创建不同的表示。建造者模式特别适合用于创建...

    设计模式之创建模式Builder

    建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...

    设计模式-建造者模式(讲解及其实现代码)

    建造者模式,是一种创建型设计模式,它提供了一种创建对象的最佳方式,特别是在对象的构建过程比较复杂,需要多个步骤时。在建造者模式中,我们创建一个指导对象(Director),该对象负责组织构建过程,而具体的构建...

    设计模式实验报告-建造者

    建造者模式是一种软件设计模式,属于创建型模式之一,主要用于解决创建复杂对象的问题。在实际应用中,当对象的构造过程过于复杂,涉及到多个属性或者子对象的组合时,直接通过构造函数创建可能会导致代码混乱、难以...

    设计模式——建造者模式

    建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...

    [原创][创建型模式] 建造者模式的理解

    建造者模式,是一种创建型设计模式,它提供了一种分步骤构建复杂对象的方法,使得创建过程独立于使用过程。在实际编程中,这种模式经常用于构造对象时有多个可选部分,用户可以选择是否包含这些部分或者如何组合它们...

    69-Java设计模式之建造者 Builder1

    建造者模式(Builder Pattern)是Java设计模式中的一种,它属于创建型模式,主要用于构建复杂的对象。这种模式将对象的创建过程与表示分离,使得同样的创建过程可以创建不同的表示。在实际开发中,当我们需要创建的...

Global site tag (gtag.js) - Google Analytics