`
hanwangkun
  • 浏览: 41450 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

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

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

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

    3.2 BUILDER(生成器)——对象创建型模式 3.3 FACTORY METHOD(工厂方法)——对象创建型模式 3.4 PROTOTYPE(原型)——对象创建型模式 3.5 SINGLETON(单件)——对象创建型模式 第四章 结构型模式 4.1 ADAPTER...

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

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

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

    第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 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...

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

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

    C#23种设计模式_示例源代码及PDF

    解释器模式将描述怎样 在 有了一个简单的文法后, 使用模式设计解释这些语句。 在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也...

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

    builder-builder:在 node、io 或浏览器中使用的运行时构建器生成器

    在节点、io 或浏览器中使用的运行时构建器生成器。 安装和兼容性 Builder Builder 可以在服务器端与 Node.JS 和 IO.JS 一起使用,也可以在浏览器中使用。 不需要库、助手或框架——它被设计为轻量级和可移植的。 ...

    ActionScript开发技术大全

    2.2.2在FlexBuilder3下创建ActionScript3.0项目 15 2.3服务端部署 16 2.3.1安装JDK 16 2.3.2安装Tomcat服务器 18 2.3.3Tomcat集成RED5服务器 20 2.4安装VisualBasic6.0 22 2.5小结 23 第3章ActionScript3.0语法 24 ...

    iphone3开发基础教程

    3.6.1 在Interface Builder中创建视图 34 3.6.2 连接所有元素 36 3.6.3 测试 39 3.7 小结 39 第4章 更丰富的用户界面 40 4.1 满是控件的屏幕 40 4.2 活动、静态和被动控件 42 4.3 创建应用程序 42 4.3.1 导入图像 ...

Global site tag (gtag.js) - Google Analytics