design pattern : Builder,使用目的,将复杂对象的构建过程和其部件解耦

原创 2007年10月04日 09:31:00

design pattern : Builder

将一个复杂对象的 构建 与他的 表示 分离,使同样的构建可以有不同的表示
此模式是一步一步创建一个复杂对象,用户通过制定复杂对象的类型和内容来构建对象,without knowing the details about creation. similar to abstract factory

使用目的,将复杂对象的构建过程和其部件解耦

simple,以装自行车为例,假设自行车由2部件组成,轮子和车架
Builder模式就是把自行车的创建和部件的创建分别开来,分别用Builder 和 Director类

先建一个接口,定义部件的创建
public interface Builder { 
   //创建部件轮子
   void wheel(); 
   //创建部件车架
   void Sketon();  
 
   //返回最后组装成品结果 (返回最后装配好的自行车)
   //成品的组装过程不在这里进行,而是转移到下面的 Director 类中
进行.
   //从而实现了解耦过程和部件
   Bike getResult(); 

用Director来组装
public class Director {
   private Builder builder; 
   public Director( Builder builder ) { 
     this.builder = builder; 
   } 
   // 将部件 partA partB 最后组成复杂对象
   //这里是将车轮 车架组装成自行车的过程
   public void construct() { 
     builder.wheel();
     builder.sketon(); 
   } 

实现接口
public class ConcreteBuilder implements Builder { 
   Part partA, partB, partC; 
   public void wheel() {
     //这里是具体如何构建 wheel 的代码
     System.out.println("wheels have been built!");
 
   }; 
   public void sketon() { 
     //这里是具体如何构建 sketon 的代码
 System.out.println("sketon have been built!");
   }; 

    public Bike getResult() { 
      Bike bike1 =null;
 System.out.println("bike have been built!");
 return bike1;
   }; 
}
复杂对象:产品 Bike
public interface Product { }
部件:
public interface Part { }
简单的 Test函数
public static void main(String[] args) {
  // TODO Auto-generated method stub
  ConcreteBuilder builder = new ConcreteBuilder();
  Director director = new Director( builder ); 
  
  director.construct(); 
  Bike product = builder.getResult();
 }
Builder 模式的应用
在 Java 实际使用中,我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,
并且这些资源需要被很多用户反复共享时,就需要使用池.
"池"实际是一段内存,当池中有一些复杂的资源的"断肢"(比如数据库的连接池,也许有时一
个连接会中断),如果循环再利用这些"断肢",将提高内存使用效率,提高池的性能.修改
Builder 模式中 Director 类使之能诊断"断肢"断在哪个部件上,再修复这个部件.

 

复杂对象的组装与创建——建造者模式

什么是建造者模式建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注...
  • Todo_
  • Todo_
  • 2016年01月28日 10:19
  • 1216

变种 Builder 模式:优雅的对象构建方式

读完本文你将了解到: 帅气的 Builder 链式调用 常见的两种构建方式 常见的构建方式之一定义多个重载的构造函数 常见的构建方式之二使用 setter 方法挨个构造 优雅的构建方式变种 Build...
  • u011240877
  • u011240877
  • 2016年11月21日 00:40
  • 4540

面向对象的php之类解耦的好处

为什么要解耦呢? 举个例子: getScore($student){ } 假如一个课程类,里面有一个获取学生分数的的方法getScore()。该方法要求传入一学号。 在这个方法中,就跟学生类...
  • a767536305
  • a767536305
  • 2015年10月06日 15:25
  • 973

解耦的概念、spring实现解耦的概述

http://tieba.baidu.com/p/32141613901. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作...
  • Mr_Gent
  • Mr_Gent
  • 2017年01月22日 09:14
  • 1730

从对象创建和引用小议解耦

解耦是软件设计领域中一个永恒不变的话题,在软件设计过程中,为了最大程度降低各个应用组件之间的耦合性,以提高其可维护性和可复用性,出现了诸多设计原则和解决方案。例如面向接口编程,开 - 闭原则,依赖倒...
  • a236209186
  • a236209186
  • 2016年06月18日 16:39
  • 470

解耦的重要性

我们这次的主题:解耦。初次了解这个名词是在学Spring的IOC 时,其实这个问题我困惑` 已久,起初对他的认识其实是在一次和好友谈关于SSH 框架的问题时,无意说的一句话:"解耦是啥 !?我想想...
  • xgl7494831
  • xgl7494831
  • 2013年03月09日 23:16
  • 823

js代码结构思考-解耦,复用,简洁

这是修改后的js代码,由于修改前没有保存下来。只能这样分析啦。define('js/module/offer-stock', ['jquery'], function($) { 'use st...
  • u012337009
  • u012337009
  • 2015年07月20日 23:24
  • 1623

Struts中访问Servlet对象的方式(与Servlet API解耦的访问方式)

一:与Servlet API解耦的访问方式      为降低 与Servlet API 耦合, Struts2 构造 Map 对象来替代servlet对象(包括 HttpServletRequest,...
  • BiLaHePan
  • BiLaHePan
  • 2016年03月15日 13:36
  • 1386

JAVA_WEB Struts2学习:Struts2解耦、耦合方式获取request、session、aplication对象

Struts: -OGNL与Servlet的最大区别:数据转移以及类型转化。 xwork-conversion.properties 处理类型转换错误(如果前台校验js很完善:等前台录入数据格...
  • dragonbamboo261
  • dragonbamboo261
  • 2013年08月25日 15:25
  • 1953

spring中的Ioc技术是怎样实现解耦的

http://tieba.baidu.com/p/3214161390 1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此...
  • liang5603
  • liang5603
  • 2016年07月23日 10:44
  • 1903
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:design pattern : Builder,使用目的,将复杂对象的构建过程和其部件解耦
举报原因:
原因补充:

(最多只允许输入30个字)