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

设计模式之创建模式——生成器(Builder)模式

 
阅读更多

      学习设计模式也有一段时间了,两个多月了。在这段时间里面,我从设计模式里面感受到设计模式无穷的魅力,并且解决了我工作中自己所负责的一个令整个公司头痛的模块(这个模块在“观察者模式”会讲)。我从自己的亲身实践及感受中,发现当系统复杂到一定程度,已经不是技术能够解决的问题了,所以我们要学习设计模式。

      我为了巩固《设计模式》的学习成果,从今天开始每天写一篇文章讲述一种设计模式,把自己的学习感受及心得全部写在上面,欢迎各位进行讨论,并指出,大家共同进步!

      常用的Java设计模式有二十四种设计模式,我将在这连续的二十四天内,把这些设计模式都写在自己的博客中,以便自己以后查看和方便各位查看!

      这二十四种设计模式,按设计模式的意图(即模式所想要解决的问题)可以分为三大类:1、创建类模式;2、结构类模式;3、行为类模式。我们首先来看下这三类设计模式分别包含了哪些设计模式:

     1、创建类模式:生成器模式,单例模式,抽象工厂模式,简单工厂模式,原型模式;

     2、结构类模式:适配器模式,桥接模式,组合模式,装饰器模式,外观模式,享元模式,代理模式;

     3、行为类模式:责任链模式,命令模式,解释器模式,观察者模式,迭代器模式,协调者模式,状态模式,空对象模式,

备忘录模式,策略模式,模板方法模式,访问者模式。


     接下来,开始我们的常用“设计模式之旅”。这篇文章,我们首先来讲生成器模式”。

 

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

     意图:复杂对象中的一些子对象的创建过程经常发生剧烈的变化(比如创建算法里面有多个分支,根据不同的参数创建不同的子对象,而创建算法进行参数传递),而组合子对象为复杂对象的算法却相对的稳定。这时用“生成器”模式,我们就是用它来分离变化的部分和相对稳定的部分。其实我个人理解是它总的来说要保持客户端的一个稳定性!

    类图:

 


 

 

涉及的角色:

1、Product :产品,其实就是复杂对象,是最终生产出来的对象

2、Builder :生成器接口或抽象类,里面主要是对复杂对象的子对象生成算法的描述;

3、ConcreteBuilderA :具体的一个生成器实现,里面实现了生成各子对象的各种算法;

4、Director :借助生成器做最后的复杂对象组合工作;


示例:我们以组装笔记本电脑为例进行举例,目前的笔记本电脑产商有:HP,DELL,Lenover,Accer等

 

 

package service;

/*
 * @功能  这个接口的功能是说明各电脑生产商是怎么来取得各个部件(子对象)
 */
public interface Builder 
{
	//CPU
	public void buildCPU();
	//内存
	public void buildRAM();
	//硬盘
	public void buildHDD();
	//鼠标
	public void buildMouse();

}

 

 

package impl;

import service.Builder;
/*
 * 惠普公司的各电脑配件情况
 */
public class HPCompany implements Builder {

	@Override
	public void buildCPU()
	{
      System.out.println("CPU来自Intel");		

	}

	@Override
	public void buildHDD() 
	{
		System.out.println("硬盘来自希捷");

	}

	@Override
	public void buildMouse() 
	{
		System.out.println("鼠标来自双飞燕");

	}

	@Override
	public void buildRAM() 
	{
		System.out.println("内存来自金士顿");

	}

}

 

 package impl;

import service.Builder;
/*
 * 联想公司的电脑配件情况
 */
public class LenoverCompany implements Builder {

	@Override
	public void buildCPU()
	{
      System.out.println("CPU来自AMD");		

	}

	@Override
	public void buildHDD() 
	{
		System.out.println("硬盘来自西数");

	}

	@Override
	public void buildMouse() 
	{
		System.out.println("鼠标来自双飞燕");

	}

	@Override
	public void buildRAM() 
	{
		System.out.println("内存来自威刚");

	}

}

 package impl;

import service.Builder;

public class Director 
{
	private Builder company;
	
	public void getHoleComputer()
	{
		company.buildCPU();
		company.buildHDD();
		company.buildRAM();
		company.buildMouse();
		System.out.println("笔记本电脑组装完成");
	}
	
	
   public void setBuilder(Builder company)
   {
	   this.company = company;
   }

}

 

 package client;

import impl.Director;
import impl.HPCompany;
import impl.LenoverCompany;

public class TestClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		
       Director direc = new Director();
       //先组装惠普的电脑
       System.out.println("------先组装惠普的电脑");
       direc.setBuilder(new HPCompany());
       direc.getHoleComputer();
       //再组装联想的电脑
       System.out.println("\n------再组装联想的电脑");
       direc.setBuilder(new LenoverCompany());
       direc.getHoleComputer();
	}

}

 

最后的输出结果如下:

 


总结:

1、生成器模式中有三种可变化的维度:子对象的生成算法、子对象的组合算法、子对象的数量,不管这三者中的哪一个

发生变化,客户端代码都是不会变化,所以这种设计模式很好地保证了客户端代码的稳定性!

2、生成器模式很好地将经常变化的部分(子对象的创建算法)与相对稳定的部分(子对象的组合算法)分离开来,保证了相对稳定算法代码的重用!

3、生成器模式与工厂模式的区别:1)工厂模式返回的是一个单一对象,而生成器模式返回的是对象的组合;2)工厂模式创建出来的对象之间不一定存在关系,但生成器模式创建的那些子对象之间是聚合关系

 

JDK中哪些用到生成器模式:

 1)java.lang.StringBuilder#append();

 2)java.lang.StringBuffer#append();

3)java.sql.PreparedStatement;

4)javax.swing.GroupLayout.Group#addComponent() 

 

  • 大小: 17.2 KB
  • 大小: 9.4 KB
分享到:
评论

相关推荐

    C#面向对象设计模式4:生成器(Builder)

    今天我们将深入探讨其中的一种——生成器(Builder)模式。 生成器模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,同时隐藏了对象组装的细节。这种模式的核心思想是将产品的构造过程与产品本身分离,使...

    【设计模式】- 生成器模式(Builder)(csdn)————程序.pdf

    生成器模式,也称为建造者模式,是一种设计模式,用于创建复杂对象,它允许你按照一系列步骤来构造对象,而这些步骤可以通过不同的实现来产生不同形式的对象。生成器模式的核心在于分离了对象的构造过程和表示细节,...

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

    3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    设计模式 让你轻松理解设计模式,提高开发效率

    工厂模式是一种常用的创建型设计模式,其核心思想是在不指定具体类的情况下创建对象。该模式通过提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,从而使客户端代码与实际创建的对象解耦。例如...

    设计模式C++版(pdf版)

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码

    - **4.4 为什么使用设计模式——从Singleton模式谈起**:通过分析Singleton模式的特点和应用场景,探讨了设计模式的重要性和实用性。 #### 5. 总结 通过本文的学习,我们可以看到设计模式不仅是一种工具,更是一种...

    设计模式精解-GoF23种设计模式解析附C实现源码.pdf

    ### 设计模式精解——GoF23种设计模式解析及C实现 #### 一、引言 在软件工程领域,设计模式被视为一种重要的实践工具和技术。它可以帮助开发者解决常见的设计问题,并提供了一系列已被验证的有效解决方案。《设计...

    深入浅出设计模式(中文版电子版)

    第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...

    Java的Builder模式生成器FreeBuilder.zip

    当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...

    C#面向对象设计模式纵横谈

    接下来,我们将进一步探索另一种创建型设计模式——Builder模式。 ### Builder模式简介 Builder模式是一种软件设计模式,它允许将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种...

    GoF 23种设计模式解析附C++实现源码(2nd Edition

    - **4.4 为什么使用设计模式——从Singleton模式谈起**:这部分从Singleton模式出发,探讨了设计模式在软件开发中的重要性和必要性,以及如何正确地选择和使用设计模式。 #### 5. 附录 - **5.1 关于设计模式的思考...

    设计模式精解-GoF23种设计模式解析

    ### 设计模式精解——GoF23种设计模式解析 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式作为一种被广泛接受的软件设计指南,在软件工程领域占据着极其重要的地位。本书旨在深入探讨GoF(Gang of Four)...

    设计模式精解(GoF 23 种设计模式解析)

    ### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 设计模式作为面向对象编程的重要组成部分,在软件工程领域扮演着至关重要的角色。本文档旨在通过对GoF(Gang of Four)提出的23种设计模式进行深度解析,...

    设计模式与现实生活,形象,生动

    ### 设计模式与现实生活 设计模式是在软件开发过程中对常见问题的一种解决方案的总结,它能够帮助开发者更好地组织代码,提高程序的复用性、灵活性和扩展性。本文将结合生活中的例子来形象地阐述几种常见的设计模式...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    第一部分 设计模式初体验第1章 你好,设计模式1.1 这是一本什么书1.2 开始前的准备1.3 预备知识1.4 似曾相识的设计1.5 设计模式的起源——模型、视图和控制器1.5.1 在模型对象中封装数据和基本行为1.5.2 使用视图...

Global site tag (gtag.js) - Google Analytics