Builder 模式

定义如下:

Separate the construction of a complex object from its representation so that the same construction process can different representations

将一个复杂对象的构建与它表示分离,是的同样的构建过程可以生成不同对象

类图如下

它一般用在下面两种情况下:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

 

 

package Builder;

import java.util.ArrayList;

public interface Builder {
 void BuildA();
 void BuildB();

  
 Product getProduct(ArrayList<Integer> list);
 void BuildC();


}

package Builder;

import java.util.ArrayList;

public class ConcreteBuilder implements Builder {
 Part a,b,c ;
 Product p;

 @Override
 public void BuildA() {
  // 声明如何创造A
  System.out.println("Build a");
  
 }

 @Override
 public void BuildB() {
  // 声明如何创造b
  System.out.println("Build b");
  
 }

 @Override
 public void BuildC() {
  // 声明如何创造c
  System.out.println("Build c");
  
 }

 @Override
 public Product getProduct(ArrayList<Integer> list) {
 for(int i:list)
 {
  switch (i){
   case 1:
    BuildA();
    break;
   case 2:
    BuildB();
    break;
   case 3:
    BuildC();
    break;
 }

 }
 System.out.println("Product was build");
 return null;
 

}
}

 

package Builder;
import java.util.*;

public class Director {
 private Builder builder;
 public Director(Builder builder){
  this.builder=builder;
 }
 public Product Construct(ArrayList<Integer>list){
     Product product= builder.getProduct(list);
       return product;
  
 }
 public static void main(String [] args){
     Builder builder=new ConcreteBuilder();
     Director dir=new Director(builder);
     ArrayList<Integer> list =new ArrayList<Integer>();
     list.add(1);
     list.add(2);
     list.add(2);
     list.add(3);
     dir.Construct(list);
 }

}

package Builder;

public interface Part {

}

package Builder;

import java.util.ArrayList;

public interface Product {

}

 

 

结果如下

Build a
Build b
Build b
Build c
Product was build

 

下面来分析一下 本模式的主要意图。把构建复杂对象与它的表示分离,同样的构建过程可以构建不同对象。这里可以看出

Builder 中定义了模版方法

getProduct 

并定义了一些实现不同部件的接口,。而ConcreteBuilder 则对其中接口进行了实现。这样不同的ConcreteBuilder 可以生成不同的部件。

其实组装方法可以在Director中定义,本实现是在 Builder中定义,但是接收一个 list 作为参数,用来控制部件的组合方式,两者实现结果相同。

 

 

比较 Builder和AbstractFactory 模式

 

AbstractFactory 是为了创造一组对象。Builder 则是将不同部件的实现与最终产品分离。就拿电脑来说,Builder模式相当于组装机发烧友,可以用不同部件不同型号,装出不同的机器。 更关注于部件。  而AbstractFactory则相当于产生出一组机器。 更关心与一些列产品。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值