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

来源:互联网 发布:网络直播有哪些平台 编辑:程序博客网 时间:2024/04/23 17:27

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 类使之能诊断"断肢"断在哪个部件上,再修复这个部件.

 
原创粉丝点击