设计模式第3篇:生成器模式(Builder)

一.生成器模式要解决的问题

  生成器模式主要解决工厂方法模式和抽象工厂模式在所创建的对象包含大量的属性时所面临的问题:

  1. 当客户端程序向工厂类传递大量参数时很容易发生错误,因为很多参数的类型有可能是相同的,并且也很难保证传递参数的顺序。
  2. 在传递参数时有些参数是可选的,但是在工厂设计模式中,所有的餐宿都必须被传递,即使可选参数也应该传递null值。
  3. 如果所要创建的对象本身很复杂,那么工厂类也会很复杂,过于复杂的程序设计不易于团队开发。

二.生成器模式的要点

  1. 首先需要在外部类中创建一个静态的生成器类,将外部类的参数(成员变量)都在生成器类中重新定义一次,这里有个命名规则,比如外部类如果为Computer,则生成器类名称为ComputerBuilder。
  2. 生成器类需要一个共有构造函数,并将必须参数作为构造函数参数传入。
  3. 生成器类需要有设置可选参数的方法,并且方法返回类型为生成器对象。
  4. 生成器类需要提供一个build()方法来返回需要创建的对象(即外部类对象)。
  5. 外部类需要一个私有构造函数,并且私有构造函数的参数类型为生成器对象。

三.附java代码如下

class Phone{
    private String cpu;
    private String memory;
    private boolean isRedColor;
    private boolean isFullScreen;
    private Phone(PhoneBuilder phoneBuilder){     //必须的参数
        this.cpu=phoneBuilder.cpu;
        this.memory=phoneBuilder.memory;

     //可选的参数
        this.isRedColor=phoneBuilder.isRedColor;
        this.isFullScreen=phoneBuilder.isFullScreen;
    }
    private static class PhoneBuilder{     // 必须的参数
        private String cpu;
        private String memory;

     //  可选的参数
        private boolean isRedColor;
        private boolean isFullScreen;
        public PhoneBuilder(String cpu,String memory){
            this.cpu=cpu;
            this.memory=memory;
        }
        public PhoneBuilder setColor(boolean redColor){
            this.isRedColor=redColor;
            return this;
        }
        public PhoneBuilder setFullScreen(boolean fullScreen){
            this.isFullScreen=fullScreen;
            return this;
        }
        public Phone builder(){
            return new Phone(this);
        }
    }
}

与客户端程序交互代码如下:

public class TestBuilderPattern {

    public static void main(String[] args) {
        //Using builder to get the object in a single line of code and
                //without any inconsistent state or arguments management issues
        Phone phone = new Phone.PhoneBuilder(
                "1.5 GHz", "2 GB").setBluetoothEnabled(true)
                .setGraphicsCardEnabled(true).build();
    }

}

原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10211970.html

时间: 2024-10-04 01:04:39

设计模式第3篇:生成器模式(Builder)的相关文章

[设计模式]<2>. C++与生成器模式(Builder pattern)

原文地址: http://www.cnblogs.com/hebaichuanyeah/p/5585957.html 当构建一个复杂对象时,将构建过程与表示分离.使得同样的过程创建不同的对象. 简单例子,构建produce类,需要构建三个部分part1,part2,part3.通过build类去构建它们,并返回.通过director 类调用build对象进行配置. C++代码 #include <iostream> using namespace std; class Produce { pu

设计模式学习笔记之生成器模式

生成器模式 封装一个产品的构造过程,并允许按步骤构造. 将一个复杂对象的构建与表示分离,使同样的构造过程可以创建不同的表示. 生成器模式结构中的四种角色: 产品(Product): 所要构建的复杂对象. 抽象生成器(Builder): 抽象生成器是一个接口,该接口除了为创建一个Product对象的各个组件定义若干个方法外,还要定义返回Product对象的方法. 具体生成器(ConcreteBuilder): 实现Buidler接口的类.  指挥者(Director): 指挥者是一个类,该类需含有

设计模式C#实现(七)——生成器模式

生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. UML类图: 构成: 1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品. 2.Director  调用Builder创建部件的方法,对产品的创建进行控制 3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件 4.Product 被创建的对象 以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默

23种设计模式(4)-生成器模式

定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象. 四个要素: Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作. ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法. Director:指导者,也被称导向者,主要用来使用Build

模式02 生成器模式(Builder)

1. 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2. 结构 此模式的结构如下图所示. 3. 参与者 Builder-- 为创建一个Product对象的各个部件指定抽象接口. ConcreteBuilder-- 实现Builder的接口以构造和装配该产品的各个部件.-- 定义并明确它所创建的表示.-- 提供一个检索产品的接口. Director-- 构造一个使用Builder接口的对象. Product-- 表示被构造的复杂对象.ConcreteBuilde

【设计模式】2、生成器模式(建造者模式)

模式结构: 1 package com.shejimoshi.create.Builder; 2 3 4 /** 5 * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 6 * 适用性: 7 * 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 8 * 当构造过程必须允许被构造的对象有不同的表示时 9 * 时间:2016年2月12日下午4:33:59 10 * 作者:cutter_point 11 */ 12 public abstract

生成器模式(Builder Pattern)

一. 建造者(Builder)模式 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 对象性质的建造 有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用.比如,一个电子邮件有发件人地址.收件人地址.主题.内容.附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出. 有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义.在某个性质没有赋值之前,另一个性质则无法赋值.

【转】设计模式(三)建造者模式Builder(创建型)

(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的.   

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

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 问题来了... 你可能会有疑惑,建造者模式和抽象工

设计模式之九:建造者模式(Builder)

建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示. Separate the construction of a complex object from its representation so that the same construction process can create different representations. 通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实