构建器模式

*构建器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类图如下:

*product产品类:表示被构建器构建的复杂对象,包含多个部件。

1 //产品接口 示意性产品,所以没有任何方法
2 public interface Product{
3 }

*builder构建器接口:定义创建一个product对象所需要的各个部件的操作。

1 //生成器接口
2 public interface Builder{
3     public void builderPart1();
4     public void builderPart2();
5     public Product getResult();
6 }

*concretebuilder具体的构建器:实现各个部件的创建,并负责组装product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。**具体的构建部件方法要由此角色来实现。

 1 //具体构建器
 2 public class ConcreteBuilder implements Builder{
 3     private Product resultProduct = new Product(){};//示意性产品这里用匿名对象表示
 4     @Override
 5     public Product getResult(){
 6         return resultProduct;
 7     }
 8     @Override
 9     public void builderPart1() {
10         //构建部件1具体方法
11     }
12     @Override
13     public void builderPart2() {
14         //构建部件2具体方法
15     }
16 }

*director指导者:主要来使用builder接口,以一个统一的过程来构建所需要的product对象。**构建算法要由此角色来实现。

 1 //指导者
 2 public class Director{
 3     private Builder builder;
 4     //注入构建器对象
 5     public Director(Builder builder){
 6         this.builder = builder;
 7     }
 8     //指导构建器构建产品,这里实现构建步骤的算法(本例是按part1、part2顺序,实际场景中会复杂得多)
 9     public void construct(){
10         builder.builderPart1();
11         builder.builderPart2();
12     }
13     public Product getProduct(){
14         return builder.getResult();
15     }
16 }

客户端代码:

1 public class Client {
2     public static void main(String[] args) {
3         Builder builder = new ConcreteBuilder();
4         Director director = new Director(builder);
5         director.construct();
6         Product product = director.getProduct();
7     }
8 }

总结:

  构建器模式的本质就是分离整体构建算法和部件构造,使产品构建过程与具体产品表现松耦合。
    构建器模式主要功能是构建复杂产品,而且是细化的、分步骤的构建产品。这个构建过程是统一的、固定不变的,它把变化的过程放到了具体构建器里,只要实现不同的生成器,相同的构建过程就可以构建出的不同的产品。

时间: 2024-07-28 22:07:00

构建器模式的相关文章

Java构建器模式

当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同的构造器,具体如下 public A(int a){} public A(int a, int b){} public A(int a, int b, int c){} 根据不同的参数调用不同的构造器,但是当参数多了的时候,这种方式不够灵活,所以会实现动态传参的方法 public A(){} public void seta(int a){} public void setb(int b){} public void setc(int

设计模式:构建器模式(Builder)

构建器模式有点类似于之前的抽象工厂模式,但比抽象工厂模式更强大,构建器模式可以看做由两部分组成,一是builder,二是director,builder的基本思想就是抽象工厂,而director的存在是为了使得对builder的使用更加灵活,下面是builder的代码示例: class A { public: int i; A() : i(1) {}; }; class B { public: char c; B() : c('a') {}; }; class AB { public: A a;

设计模式---对象创建模式之构建器模式(Builder)

一:概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 对象的创建:Builder模式是为对象的创建而设计的模式 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法. 二:动机 在软件

Java设计模式:Builder(构建器)模式

基本概念 Builder模式是一步一步创建一个复杂对象的创建型模式.该模式将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来. 应用场景 对象创建过程比较复杂,或对创建顺序或组合有依赖(经典Builder模式,可参阅GOF<设计模式>). 创建对象时所需参数较多,且包含较多可选参数(变种Builder模式,可参阅<Effective Java>构建器小节). 示例代码 本节侧重变种Builder模式,示例代码如下: public class RobustPerso

GOF之构建器模式

动机(Motivation) 在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定. 如何应对这种变化>如何提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"不随着需求改变而改变? 意图(Intent) 将一个复杂复杂对象的构建与其表示相分离,

多个构造器参数使用构建器

标题一眼看过去可能不是很明白要讲什么,先来看看下面一段代码. 1 package example; 2 3 /** 4 * 重叠构造器 5 * @author yulinfeng 6 * Feb 13, 2017 7 */ 8 public class Student1 { 9 private String name; 10 private int age; 11 private String sex; 12 13 public Student1(String name) { 14 this(n

建造者模式之构建器

其实建造者模式就是类中创建一个内部类 然后外部类构造函数传递的是一个内部类的对像,然后在内部类中的set和get方法中返回值是一个内部类对像,这样就能很好的实现建造者模式.其实他就像StringBuilder中的append:string a="a":a.append("wo").append("shi").append("shei").实现一直不断的追加字符串. 例子如下: package com.blueZhang.inn

10.9-全栈Java笔记:装饰器模式构建IO流体系

装饰器模式 装饰器模式是GOF23种设计模式中较为常用的一种模式.它可以实现对原有类的包装和装饰,使新的类具有更强的功能. 我这里有智能手机Iphone, 我们可以通过加装投影组件,实现原有手机功能的扩展.这就是一种"装饰器模式". 我们在未来普通人加装"外骨骼"装饰,让普通人具有力扛千斤的能力,也是一种"装饰器模式". [图] 手机经过投影套件"装饰后",成为功能更强的"投影手机" [示例1]装饰器模式代

【设计模式】之装饰器模式

为什么会有装饰模式? 装饰模式是为了解决继承强依赖性和出现大量子类不方便管理问题而出现的.   1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活. 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数.装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法.修饰类必须和原来的类有相同的接口. 2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态