`
jy03100000
  • 浏览: 34196 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式:建造者模式

 
阅读更多

定义

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

Builder Pattern: Separate the construction of a complex object from its representation so that the same construction process can create different representations

 

优点

  1. 封装性,可以使客户端不必知道产品内部组成细节
  2. 建造者独立,容易扩展
  3. 便于控制细节风险

 

使用场景

  1. 相同的方法,不同的执行顺序,产生不同的时间结果时
  2.  多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时
  3. 产生类非常复杂,或者产品类中的调用顺序不同产生了不同的效能

实现方法

Product产品类:通常实现了模板方法模式

Builder抽象建造者:规范产品的组建,一般由子类实现

ConcreteBuilder具体建造者:实现抽象类定义的所有方法,并返回一个建造好的对象

Director导演类:负责安排已有模块的顺序,然后告诉Builder开始建造

 

具体实现

产品抽象类

public abstract class CarModel {
 
    private ArrayList<String> sequence = new ArrayList<String>();
 
    protected abstract void start();
 
    protected abstract void stop();
 
    protected abstract void alarm();
 
    protected abstract void engineBoom();
 
    final public void run() {
        for (int i = 0; i < sequence.size(); i++) {
            String actionName = this.sequence.get(i);
            if (actionName.equalsIgnoreCase("start")) {
                this.start();
            } else if (actionName.equalsIgnoreCase("stop")) {
                this.stop();
            } else if (actionName.equalsIgnoreCase("alarm")) {
                this.alarm();
            } else if (actionName.equalsIgnoreCase("engine boom")) {
                this.engineBoom();
            }
        }
    }
 
    final public void setSequence(ArrayList<String> sequence) {
        this.sequence = sequence;
    }
}
 

 

产品实现类A

public class BenzModel extends CarModel {
 
    @Override
    protected void start() {
        System.out.println("Benz Start!");
    }
 
    @Override
    protected void stop() {
        System.out.println("Benz Stop!");
    }
 
    @Override
    protected void alarm() {
        System.out.println("Benz Alarm!");
    }
 
    @Override
    protected void engineBoom() {
        System.out.println("Benz Engine Boom!");
    }
}

  

产品实现类B

public class BMWModel extends CarModel {
 
    @Override
    protected void start() {
        System.out.println("BMW Start!");
    }
 
    @Override
    protected void stop() {
        System.out.println("BMW Stop!");
    }
 
    @Override
    protected void alarm() {
        System.out.println("BMW Alarm!");
    }
 
    @Override
    protected void engineBoom() {
        System.out.println("BMW Engine Boom!");
    }
}

  

抽象建造者

public abstract class CarBuilder {
 
    public abstract void setSequence(ArrayList<String> sequence);
 
    public abstract CarModel getCarModel();
}

 

 

具体建造者A

public class BenzBuilder extends CarBuilder {
 
    private BenzModel benz = new BenzModel();
 
    @Override
    public void setSequence(ArrayList<String> sequence) {
        this.benz.setSequence(sequence);
    }
 
    @Override
    public CarModel getCarModel() {
        return benz;
    }
}

  

具体建造者B

public class BMWBuilder extends CarBuilder {
 
    private BMWModel bmw = new BMWModel();
 
    @Override
    public void setSequence(ArrayList<String> sequence) {
        this.bmw.setSequence(sequence);
    }
 
    @Override
    public CarModel getCarModel() {
        return bmw;
    }
}

  

导演类

public class Director {
 
    private ArrayList<String> sequence = new ArrayList<String>();
    private BenzBuilder benzBuilder = new BenzBuilder();
    private BMWBuilder bmwBuilder = new BMWBuilder();
 
    public BenzModel getABenzModel() {
        this.sequence.clear();
        this.sequence.add("start");
        this.sequence.add("stop");
        this.benzBuilder.setSequence(sequence);
        return (BenzModel) this.benzBuilder.getCarModel();
    }
 
    public BenzModel getBBenzModel() {
        this.sequence.clear();
        this.sequence.add("engine boom");
        this.sequence.add("start");
        this.sequence.add("stop");
        this.benzBuilder.setSequence(sequence);
        return (BenzModel) this.benzBuilder.getCarModel();
    }
 
    public BMWModel getABMWModel() {
        this.sequence.clear();
        this.sequence.add("start");
        this.sequence.add("stop");
        this.bmwBuilder.setSequence(sequence);
        return (BMWModel) this.bmwBuilder.getCarModel();
    }
 
    public BMWModel getBBMWModel() {
        this.sequence.clear();
        this.sequence.add("engine boom");
        this.sequence.add("start");
        this.sequence.add("stop");
        this.bmwBuilder.setSequence(sequence);
        return (BMWModel) this.bmwBuilder.getCarModel();
    }
}

  

场景类

 

public class Client {
 
    public static void main(String[] args) {
        Director director = new Director();
        for (int i = 0; i < 2; i++) {
            director.getABenzModel().run();
        }
        for (int i = 0; i < 3; i++) {
            director.getBBenzModel().run();
        }
        for (int i = 0; i < 2; i++) {
            director.getABMWModel().run();
        }
        for (int i = 0; i < 3; i++) {
            director.getBBMWModel().run();
        }
    }
}

PS:基本理解这种写法的思想和意义,但不深刻

 

参考内容:

《设计模式之禅》秦小波

 

 

分享到:
评论

相关推荐

    23种设计模式之:建造者,代理,观察,策略,状态模式

    本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...

    设计模式——建造者模式

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

    设计模式:基于C#的工程化实现及扩展(完整电子版)

    这些模式在不同的开发环境中都展现出其价值,包括单例模式、工厂模式、观察者模式、装饰器模式、适配器模式、建造者模式等。 在C#中,我们可以利用面向对象的特性,如类、接口和继承,来实现这些设计模式。例如,...

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

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

    设计模式:可复用面向对象软件的基础.zip

    4. 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 5. 适配器模式(Adapter):允许两个不兼容的接口协同工作。通过包装对象,适配器模式可以将旧的接口转换为新...

    《设计模式:可复用面向对象软件的基础》英文版

    包括抽象工厂模式(Abstract Factory)、建造者模式(Builder)、工厂方法模式(Factory Method)、原型模式(Prototype)和单例模式(Singleton)等。 - **结构型模式**:关注于类或对象的组合方式,使它们能形成更...

    java常用设计模式-建造者模式

    java常用设计模式-建造者模式 -java常用设计模式-建造者模式是java中的一种创建型设计模式,它允许开发者通过一步一步地构建复杂对象来创建不同类型的对象。 建造者模式的定义 建造者模式是一种创建型设计模式,...

    设计模式之建造者Builder模式

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

    设计模式之建造者模式

    建造者模式是软件设计模式中的一种,属于创建型模式,它的主要目的是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java的23种设计模式中,建造者模式是一个非常实用且重要的模式。 ...

    设计模式:可复用面向对象软件的基础--详细书签版

    整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...

    原创:设计模式之建造者模式生动实例

    建造者模式,是设计模式中的一种创建型模式,它的核心思想是将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在Java编程中,这种模式经常用于生成对象,特别是当对象的创建过程较为复杂时,...

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

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

    设计模式-建造者模式

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

    C#设计模式之建造者模式

    建造者模式是软件设计模式中的一种,主要用于将复杂的对象构建过程与对象的使用分离,使得同样的构建过程可以创建不同的表示。在C#中,我们可以通过类的继承和接口的使用来实现这一模式。以下是关于“C#设计模式之...

    设计模式例子,观察者模式,建造者模式

    在给定的压缩包文件中,"设计模式例子,观察者模式,建造者模式" 提到了两种重要的设计模式:观察者模式(Observer Pattern)和建造者模式(Builder Pattern)。下面我们将深入探讨这两种设计模式的概念、应用场景、...

    c++ 建造者模式实例

    建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。这就是建造者模式。 建造者模式可以把一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程就可以生成...

    设计模式:可复用的面向对象软件的基础

    常见的创建型模式有单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。 2. 结构型模式:这类模式关注如何组合类和对象以获得更大的结构,主要涉及如何将类或对象结合在一起形成更大的结构,但同时保持...

    设计模式:可复用面向对象软件设计基础(附源码)

    1. **创建型模式**:如单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。它们关注对象的创建过程,使得代码在创建对象时更加灵活和可控。 2. **结构型模式**:如适配器模式、装饰器模式、代理模式、...

Global site tag (gtag.js) - Google Analytics