建造者模式

来源:互联网 发布: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();}}


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿2天没大便怎么办 新生儿4天没大便怎么办 2岁宝宝便秘严重怎么办 婴儿7天没有大便怎么办 新生儿6天没大便怎么办 大便带鲜血 不疼怎么办 宝宝发烧到39度怎么办 肛裂大便出鲜血怎么办 拉大便有血怎么办啊 长痔疮拉大便血怎么办 病人卧床太久不解大便怎么办 宝宝拉泡沫便便怎么办 孩子拉肚子怎么办呢有好办法吗 2岁宝宝大便带血怎么办 十个月宝宝肛裂怎么办 大便时拉出血怎么办啊 2岁宝宝大便干燥怎么办 5岁儿童大便干燥怎么办 九个月宝宝平血怎么办 6个月宝宝肛裂怎么办 3岁儿童大便干燥怎么办 外痔疮出血了该怎么办 外痔疮流血了怎么办呢 外痔疮破了出血怎么办 拉稀拉的肛门疼怎么办 大人屁股沟裂了怎么办 肛门痛大便有血怎么办 肛裂出血几天了怎么办 肛裂拉屎出血该怎么办 孕期肛裂出血该怎么办 老人大便拉不出来怎么办 拉屎拉的屁眼疼怎么办 拉屎堵在肛门口怎么办 上火拉大便有血怎么办 7岁儿童大便带血怎么办 阴炎用药后出血怎么办 孕晚期大便拉不出来怎么办 想拉屎拉不出来怎么办 4岁幼儿大便干燥怎么办 2岁幼儿大便干燥怎么办 1岁幼儿大便干燥怎么办