建造者模式
来源:互联网 发布:ipad上必备软件 编辑:程序博客网 时间:2024/04/29 20:40
建造者模式
意图
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
有些产品结构比较复杂,构成产品的零件有许多个,这许多个零件又没有什么关系,并且这些零件的组合是有必须的顺序的,比如在实现对数据库查询过程中,要实现一下步骤:1.实例化数据库连接对象SqlConnection;2实例化sql命令对象SqlCommand;3.设定sql命令对象的sql语句和参数;4.打开数据库连接;5.执行sql命令对象,并返回结果;6,关闭数据库连接。在刚学编程的时候,我们可能会在每个页面需要访问数据库的地方重复上面的步骤写一段代码。但如果采用了建造者模式,将实例化sql命令对象的复杂过程封装到一个类中,这样实现访问的代码和操作就变的简单多了。
综上,在以下情况下使用建造者模式:
1. 有许多的零件类要通过一种必须的顺序构成一个产品类,就应该使用建造者模式,这时可以有也可以没有指导者角色
2. 如果这些零件要组成的产品类不止一个,需要指导者角色
3. 如果产品类不止一类,则需要抽象指导者角色,构造多个指导者角色的实体类
下面我们以一个电脑产品生产的实例来具体看看Builder Pattern是如何使用的:
一、产品角色
//产品class Computer{private string m_CompName;private string m_MemorySize;private string m_DiskSize;/// <summary>/// 电脑名称/// </summary>public string CompName{get { return m_CompName; }set { m_CompName = value; }}/// <summary>/// 内存大小/// </summary>public string MemorySize{get { return m_MemorySize; }set { m_MemorySize = value; }}/// <summary>/// 硬盘大小/// </summary>public string DiskSize{get { return m_DiskSize; }set { m_DiskSize = value; }}/// <summary>/// 显示产品的信息/// </summary>public void ShowComputerInfo(){Console.WriteLine("------------------------");Console.WriteLine("电脑名称:" + CompName);Console.WriteLine("内存大小:" + MemorySize);Console.WriteLine("硬盘大小:" + DiskSize);}}
二、建造者角色
//建造者 定义建造产品的抽象方法和产品的引用abstract class ComputerBuilder{private Computer computerInstance;/// <summary>/// 返回建立的电脑产品实例/// </summary>public Computer ComputerInstance{get { return computerInstance; }set { computerInstance=value; }}/// <summary>/// 创建电脑名称/// </summary>abstract public void CreateCompName();/// <summary>/// 创建电脑内存/// </summary>abstract public void CreateCompMemory();/// <summary>/// 创建电脑硬盘/// </summary>abstract public void CreateCompDisk();}
三、具体建造者角色
//具体建造者创建苹果电脑class AppleConcreteBuilder : ComputerBuilder{public override void CreateCompName(){ ComputerInstance = new Computer(); ComputerInstance.CompName = "苹果电脑";}public override void CreateCompMemory(){ ComputerInstance.MemorySize = "4G";}public override void CreateCompDisk(){ ComputerInstance.DiskSize = "500G";}}//具体建造者创建戴尔电脑class DellConcreteBuilder : ComputerBuilder{public override void CreateCompName(){ ComputerInstance = new Computer(); ComputerInstance.CompName = "戴尔电脑";}public override void CreateCompMemory(){ ComputerInstance.MemorySize = "2GB";}public override void CreateCompDisk(){ ComputerInstance.DiskSize = "320GB";}}//具体建造者创建惠普电脑class HpConcreteBuilder : ComputerBuilder{public override void CreateCompName(){ ComputerInstance = new Computer(); ComputerInstance.CompName = "惠普电脑";}public override void CreateCompMemory(){ ComputerInstance.MemorySize = "1GB";}public override void CreateCompDisk(){ ComputerInstance.DiskSize = "160GB";}}//具体建造者创建IBM电脑class IBMConcreteBuilder : ComputerBuilder{public override void CreateCompName(){ ComputerInstance = new Computer(); ComputerInstance.CompName = "IBM电脑";}public override void CreateCompMemory(){ ComputerInstance.MemorySize = "2G";}public override void CreateCompDisk(){ ComputerInstance.DiskSize = "1000G";}}
四、指挥者角色
//指挥者class CreateDirector{/// <summary>/// 调用建造者抽象方法以生产产品/// </summary>/// <param name="compBuilder"></param>public void CreateComputer(ComputerBuilder compBuilder){ compBuilder.CreateCompName(); compBuilder.CreateCompMemory(); compBuilder.CreateCompDisk();}}
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- 建造者模式
- 建造者模式(Builder)
- 建造者模式
- UIActionSheet not show
- .NET sql查询返回DataTable数据量大的时候有严重的效率问题
- 使用RMAN恢复数据库
- Sqlserver:sqlserver2005在安装过程中,提示“ [Microsoft][SQL Native Client]客户端不支持加密”的问题解决
- 选择对10个数排序,函数调用。
- 建造者模式
- 基于uml的面向对象的概要设计
- list sort
- android:layout_XXX View在(上层)Layout中的XXX
- gdb的使用
- 关于nil和 null和NSNull的区别及相关问题
- iOS游戏开发:从创意到实现
- X-UA-Compatible/IE=EmulateIE7/IE=7
- Qt按键键值 与 相关字符串 的映射表