`
zhangwei_david
  • 浏览: 477193 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 
阅读更多

    建造者模式(Builder Pattern)是属于创建型模式,它的意图是:将一个复杂的对象的创建和表示分离,是的同样的构建过程可以创建不同的表示。

   如果有一个类Test有1个属性 name,不管我们如何穿件这个对象的实例都不会很麻烦。

public class Test {

    private String name;

    public Test(String name) {
        super();
        this.name = name;
    }

    public Test() {
        super();
    }

    /**
     * Getter method for property <tt>name</tt>.
     *
     * @return property value of name
     */
    public String getName() {
        return name;
    }

    /**
     * Setter method for property <tt>name</tt>.
     *
     * @param name value to be assigned to property name
     */
    public void setName(String name) {
        this.name = name;
    }

}

 

public class TestClient {

    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        Test test=new Test();
        test.setName("MyTest");
        
        Test test2=new Test("MyTest2");
    }

}

 那么,如果一个类的属性有很多,甚至是数十个的时候构建一个对象将是一件很痛苦的过程,如下就是在项目中遇到的一个构建一个对象。

 

   TaxBillModel taxBillModel = new TaxBillModel();

        taxBillModel.setApplyBillDate(new Date());
        taxBillModel.setBillBatchNo(billBatchNo);
        taxBillModel.setBillDate(new Date());
        taxBillModel.setChargeOffDate(new Date());
        taxBillModel.setCheckDate(new Date());
        taxBillModel.setExchangeDate(new Date());
        taxBillModel.setExchangeRate(Double.parseDouble(exchangeRate));
        taxBillModel.setExpiryDate(new Date());
        taxBillModel.setFailureAmount(new Money(Double.parseDouble(failureAmount)));
        taxBillModel.setFailureCount(Long.parseLong(failureCount));
        taxBillModel.setGmtCreate(new Date());
        taxBillModel.setGmtModified(new Date());
        taxBillModel.setOriginalAmount(new Money(Double.parseDouble(originalAmount)));
        taxBillModel.setPartnerName(partnerName);
        taxBillModel.setRealCurrency(realCurrency);
        taxBillModel.setRealAmount(new Money(Long.parseLong(realAmount)));
        taxBillModel.setPartnerId(parnterId);
        taxBillModel.setRemitNo(remitNo);
        taxBillModel.setSuccessCount(Long.parseLong(successCount));
        taxBillModel.setCurrency(currency);
        taxBillModel.setStatus("RA");

 在这样的一个情况下我们应该使用Builder Pattern 去解决问题。

 

public class MyModel {

    private int        id;
    /**名称**/
    private String     name;

    /**币种**/
    private String     currency;

    /**金额**/
    private BigDecimal amount;

    /**
     * Getter method for property <tt>id</tt>.
     *
     * @return property value of id
     */
    public int getId() {
        return id;
    }

    /**
     * Setter method for property <tt>id</tt>.
     *
     * @param id value to be assigned to property id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Getter method for property <tt>name</tt>.
     *
     * @return property value of name
     */
    public String getName() {
        return name;
    }

    /**
     * Setter method for property <tt>name</tt>.
     *
     * @param name value to be assigned to property name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Getter method for property <tt>currency</tt>.
     *
     * @return property value of currency
     */
    public String getCurrency() {
        return currency;
    }

    /**
     * Setter method for property <tt>currency</tt>.
     *
     * @param currency value to be assigned to property currency
     */
    public void setCurrency(String currency) {
        this.currency = currency;
    }

    /**
     * Getter method for property <tt>amount</tt>.
     *
     * @return property value of amount
     */
    public BigDecimal getAmount() {
        return amount;
    }

    /**
     * Setter method for property <tt>amount</tt>.
     *
     * @param amount value to be assigned to property amount
     */
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

}

 

public class MyModelBuilder {

    private int        id;

    private String     name;

    private String     currency;

    private BigDecimal amount;

    public MyModelBuilder addId(int id) {
        this.id = id;
        return this;
    }

    public MyModelBuilder addName(String name) {
        this.name = name;
        return this;
    }

    public MyModelBuilder addMoney(String currency, BigDecimal amount) {
        this.currency = currency;
        this.amount = amount;
        return this;
    }

    public MyModel toMyModel() {
        MyModel myModel = new MyModel();
        myModel.setAmount(amount);
        myModel.setCurrency(currency);
        myModel.setId(id);
        myModel.setName(name);
        return myModel;
    }
}
public class Client {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        MyModelBuilder builder = new MyModelBuilder();
        builder.addMoney("USD", BigDecimal.valueOf(100));
        builder.addId(0);
        builder.addName("Test");
        MyModel myModel = builder.toMyModel();
        System.out.println(myModel);
    }

}

 

分享到:
评论

相关推荐

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...

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

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

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

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

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    讲故事,学(Java)设计模式-建造者模式Java开发Ja

    建造者模式,是Java设计模式中的重要组成部分,它在软件工程中扮演着构造复杂对象的角色。这个模式的主要目的是将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。通过使用建造者模式,我们可以...

    JAVA设计模式-chm版

    这类模式关注对象的创建过程,包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。它们提供了创建对象的不同策略,使代码更加灵活...

    设计模式——建造者模式

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

    设计模式之建造者Builder模式

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

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

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

    设计模式-Builder模式demo

    在Java中,Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,Builder定义了产品的构造接口,ConcreteBuilder实现...

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

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

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    java设计模式-图解-附代码

    ### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...

    JAVA设计模式-设计模式公司出品

    8. 建造者模式(BUILDERPATTERN):建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 此外,书中还提到了“六大设计原则”,这是设计模式背后的指导思想,包括: 1. 单一...

    设计模式之建造者模式代码示例

    建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...

    23种设计模式的java实现-Builder

    在Java中,23种设计模式被广泛接受并分为三大类:创建型、结构型和行为型。Builder设计模式是创建型模式之一,主要解决复杂对象的构建问题,使得构建过程与表示分离。 Builder模式的核心思想是将一个复杂对象的构建...

    JAVA设计模式--入门

    5. 建造者模式(Builder):将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 **结构型设计模式** 1. 适配器模式(Adapter):使两个不兼容的接口能够协同工作。 2. 桥接模式(Bridge):将...

    《Java设计模式》课后答案-刘伟.rar

    创建型设计模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们主要关注对象的创建过程,使得代码更加灵活且易于扩展。 结构型设计...

    Java设计模式-图文详解

    ### Java设计模式详解 #### 1. 创建型模式 创建型模式主要关注的是对象的创建方式,它们提供了创建对象的最佳方法。以下是对几种常见的创建型模式的深入解析: ##### 1.1.1 工厂方法(Factory Method) **定义**...

    java设计模式----源代码

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可扩展性。本压缩包包含的源代码涵盖了多个经典的设计模式,接下来将对这些模式进行详细介绍。 1....

Global site tag (gtag.js) - Google Analytics