博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
步步为营之——建造者模式(Builder)
阅读量:5941 次
发布时间:2019-06-19

本文共 1705 字,大约阅读时间需要 5 分钟。

Builder模式的定义是:将一个复杂对象构建与其表示相分离,使得同样的构建过程可以创建不同的表示 

首先它意图是要构建一个复杂的对像,而这个复杂的对像往往需要由好几个子对像或分步聚来完成最终的这个对象的构建,而这个复杂对象的子对像经常需要不断的变化,但它的构建过程是相对是稳定的。

比如:一部汽车:它由发动机,轮胎、底盘,车身组成。而此时无论我最终构建的汽车是大众牌的汽车还是奥迪汽车,它的构建过程是不会变的,都是由发动机,轮胎、底盘,车身组成。至于大众牌的汽车还是奥迪汽车它们各自采用的是什么样的发动机,轮胎、地盘这些肯定是不一样的,也就是经常变化的。

通过对上面的分析,我们能够得出其下代码:

 1 
public 
abstract 
class BuilderCar
 2     {
 3         
public 
abstract 
void Engine();
//
发动机
 4 
        
public 
abstract 
void Chassis();
//
底盘
 5 
        
public 
abstract 
void Carbody();
//
车身
 6 
        
public 
abstract 
void Tire();
//
轮胎
 7 
 8 
 9         
public 
abstract Car GetCar();
//
最终构建出来的汽车
10 
      
11     }
12 
13     
public 
abstract 
class Car {} 
 
14     

 

 接下来就是我们的逻辑代码了
 
 
1 
public 
class
 ClentBLL 

 2     { 

 3         private BuilderCar buildercar=null;
 4         public ClentBLL(BuilderCar buildercar)
 5         {
 6             this.buildercar = buildercar;
 7         }
 8 
 9         public Car BuilderCar()
10         {
11             buildercar.Carbody();//车身
12             buildercar.Chassis();//底盘
13             buildercar.Engine();//发动机
14             buildercar.Tire();//轮胎
15 
16             return buildercar.GetCar();
17         }

 现在我们来构建一台奥迪车。

  1     //构建一台奥迪汽车

 2 
    
public 
class OOOOCar:Car 
 3     { 
 4         
 5     }
 6 
 7 
 8     
public 
class OOOOBuilderCar : BuilderCar
 9     {
10         
public  
void Engine(){
11             
//
发动机
12 
            
//
在这你随便弄什么样的发动机都可以,。
13 
        }
14         
public  
void Chassis(){}
15         
public 
void Carbody() { }
16         
public  
void Tire();
17 
18 
19         
public  Car GetCar() { 
20             
//
这块也许会用到上面这些部件方法
21 
                
//
做一些其它的事情。
22 
23          
return    
new OOOOCar();
//
生成最终的汽车
24 
        
25         }

 调用代码:

  1  public class APP

2     {
3         
public 
static 
void Main()
4         {
5             ClentBLL cbll = 
new ClentBLL(
new OOOOBuilderCar());
//
如果想换成其它品牌的车子,只需改动这块
6 
        }
7     }

 其它不难发现Builder模式与Abstract Factory模式在代码上有一定的相似性,但是它们解决的问题还有一定的差别的。

  Builder模式主要解决"复杂对象各个部分"的频繁需求变动。

  Abstract Factory模式解决“系列对象”的需求变化。

它们相同的地方都是:抽象体内的对象或过程是稳定不变的,至于在项目中使用哪一个,这就要具体分析了。 

 

转载于:https://www.cnblogs.com/qgf522/archive/2012/04/12/2443404.html

你可能感兴趣的文章
利用GetPrivateProfileString读取配置文件(.ini)
查看>>
Django--Uploaded Files以及Handlers
查看>>
请求一个action,将图片的二进制字节字符串在视图页面以图片形式输出
查看>>
android 颜色值参考,(有颜色图
查看>>
在IIS(64位)上部署WCF服务访问Oracle数据库
查看>>
UltraISO软碟通U盘安装Centos7 的各种报错及解决方案
查看>>
C# 判断两张图片是否一致,极快速
查看>>
个人在 laravel 开发中使用到的一些技巧(持续更新)
查看>>
Go开发之路 -- 指针类型
查看>>
java 打包的两种方式
查看>>
LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。...
查看>>
java ADT生成带签名的apk
查看>>
Opencv笔记(九)——图像阈值
查看>>
Android Touch事件原理加实例分析
查看>>
对网页是否为当前展示标签页、是否最小化、以及是否后台运行进行监听
查看>>
听君一席话,胜读十年书
查看>>
2.pandas数据清洗
查看>>
base64转码java版
查看>>
人工智能AI-机器视觉CV-数据挖掘DM-机器学习ML-神经网络-[资料集合贴]
查看>>
秋季4类疾病患者忌吃螃蟹
查看>>