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

定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用场景:

创建的产品有复杂的内部结构,且创建的产品有较多的共同点,其组成部分相似。隔离复杂对象的创建,使得相同的过程可以创建不同的产品。

与抽象工厂的区别:

在建造者模式里,有个指导者,由指导者来管理创造者,用户是与指导者联系的,指导者联系创建者得到最后的产品。

角色:

Builder:一个抽象接口,用于规范定义复杂对象的组成部分。

ConcreteBuilder:实现Builder接口,具体化复杂对象的各个部分的创建。

Director:指导者角色,调用具体建造者来创建复杂对象的各个部分。

Product:要创建的复杂对象。

这里以一个KFC点餐的案例作为例子,代码如下,仅供参考:

产品类定义

public class Meal {

    private String food;

    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }

}

建造者抽象类定义

public abstract class Builder {

    abstract void buildFood();

    abstract void buildDrink();

    public Meal getResult(){
        return new Meal();
    }

}      

具体建造者定义

public class MealBuilderA extends Builder{

    public void buildFood(){
        System.out.println("一个汉堡!");
    }

    public void buildDrink(){
        System.out.println("一杯可乐!");
    }

}
public class MealBuilderB extends Builder{

    public void buildFood(){
        System.out.println("三个鸡翅!");
    }

    public void buildDrink(){
        System.out.println("一杯奶茶!");
    }

}

指导者类定义

public class Director {

    private Builder builder;

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public Meal construct(){
        builder.buildFood();
        builder.buildDrink();

        return builder.getResult();
    }

}

客户端类定义

public static void main(String[] args){
        //创建指导者
        Director director = new Director();
        System.out.println("========套餐A==========");
        //建造者A
        Builder builderA = new MealBuilderA();
        director.setBuilder(builderA);
        //返回套餐A
        director.construct();

        System.out.println("========套餐B==========");
        //建造者B
        Builder builderB = new MealBuilderB();
        director.setBuilder(builderB);
        //返回套餐B
        director.construct();

}

参考文章:http://blog.csdn.net/chenssy/article/details/11354661

时间: 2024-10-03 21:54:36

设计模式(三)建造者模式(创建型)的相关文章

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

模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象.所以建造者模式又叫生成器模式. 建造者模式类图 模式结构 建造者模式包含如下角色 Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 如果系统只需要一个具体的建造者类的时候,可以省略抽象建造者,有时候指挥者类也可以省略,让建造者类同时充当指挥者和建造者 简单

五、建造者模式--创建型模式

建造者模式:可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象 建造都模式UML类图: 类图关系说明: 建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造.一般而言,此接口独立于应用程序的商业逻辑.模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色.具体建造者类必须实现这个接口所要求的方法:一个是建造方法, 另一个是结果返还方法. 具体建造者(Concrete Builder)角色:担任

php设计模式三-----建造者模式

1.简介 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定. 何时使用:一些基本部件不会变,而其组合经常变化的时候. 优点: 1.建造者独立,易扩展. 2.便于控制细节风险. 缺点: 1.产品必须有共同点,范围有限制. 2.如内部变化复杂,会有很多的

C#设计模式之四建造者模式(Builder Pattern)【创建型】

原文:C#设计模式之四建造者模式(Builder Pattern)[创建型] 一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬盘.显卡.机箱等组装而成的.手机当然也是复杂物品,由主板,各种芯片,RAM 和ROM  摄像头之类的东西组成.但是无论是电脑还是手机,他们的组装过程是固定的,就拿手机来说,组装流水线

设计模式(三) : 创建型模式--工厂方法模式

工厂方法模式区别与简单工厂模式主要在于,factory中对对象的实例化延迟到了子类的factory中, 这也是优于简单工厂的地方.下面看这个模式的类图(截自<java与模式>): 示意性代码: ? 1 2 3 4 5 6 7 package com.javadesignpattern.factorymethod; public interface Creator {          public Product fatcory(); } package com.javadesignpatte

设计模式(三): FACTORY工厂模式 -- 创建型模式

1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来.Java Collection中的iterator() 方法即属于这种情况. 2.第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给

C++设计模式之建造者模式(三)

4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外,还可以通过Director类来更加精细地控制产品的创建过程,例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用,也就是判断产品中某个部件是否需要被建造.钩子方法的返回类型通常为boolean类型,方法名一般为isXXX(),钩子方法定义在抽象建造者类中.在抽象建造者类中提供钩子方法的默认实现,具体建造者类如果不需要建造某个部件,则该建造者类覆盖抽象建造者类的钩子方法.

设计模式(二): BUILDER生成器模式 -- 创建型模式

1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2. 当构造过程必须允许被构造的对象有不同表示时. 3.评价 1. 它使你可以改变一个产品的内部表示. Builder对象提供给导向器一个构造产品的抽象接口.该接口使得生成器可以隐藏这个产品的表示和内部结构.它同时也隐藏了该产品是如何装配的.因为产品是通过抽象接口构造的,你在改变该产品的内部表

设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现. 3.评价 1.它分离了具体的类 2.它使得易于交换产品系列 3.它有利于产品的一致性 4.难以支持新种类的产品 5."开放-封闭"原则要求系统对扩展开放,对修改封闭.通过扩展达到增

设计模式主要分三个类型:创建型、结构型和行为型

设计模式主要分三个类型:创建型.结构型和行为型. 其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二.Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类. 三.Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 四.Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使