C#程序设计-建造者模式
Vivian 2018-05-22 来源 : 阅读 1205 评论 0

摘要:C#程序设计学习中,将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。希望对大家学习C#程序设计有所帮助。

1. 概述

  C#程序设计学习中,将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。希望对大家学习C#程序设计有所帮助。

2. 建造者模式中的角色

  2.1 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口。
  2.2 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
  2.3 指挥者(Director):指挥并构造一个使用Builder接口的对象。
  2.4 产品(Product):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

3. 实例:创建一个人,这个人可以有不同的特点,可以是胖子,可以是瘦子,可以是高个子,也可以是矮个子。

  3.1 以下是这个实例的类图,以及对类图的解读。

 C#程序设计-建造者模式

  3.2 代码实现及解读:

// 要建造的产品
public class Person
{
  public string Head { get; set; }
  public string Body { get; set; }
  public string Arm { get; set; }
  public string Leg { get; set; }
}
 
// 定义创建者接口,实现者必须实现该接口中定义的所有抽象方法,防止实现者疏忽而遗漏某个部件的创建
public abstract class Builder
{
  protected Person Person { get; set; }
  public Builder()
  {
    Person = new Person();
  }
 
  // 建造头
  public abstract void BuildHead();
  // 建造身体
  public abstract void BuildBody();
  // 建造胳膊
  public abstract void BuildArm();
  // 建造腿
  public abstract void BuildLeg();
 
  // 返回生成好的对象,这是一个具体方法,每个子类都可以使用它来返回一个已经创建成功的对象
  public Person GetPerson()
  {
    return Person;
  }
}
 
// 建造者的具体实现,这里是要建造出一个瘦子
public class ThinPersonBuilder : Builder
{
  public ThinPersonBuilder()
  {
    Person = new Person();
  }
 
  public override void BuildHead()
  {
    Person.Head = "瘦子的脑袋";
  }
 
  public override void BuildBody()
  {
    Person.Body = "瘦子的身体";
  }
 
  public override void BuildArm()
  {
    Person.Arm = "瘦子的胳膊";
  }
 
  public override void BuildLeg()
  {
    Person.Leg = "瘦子的腿";
  }
 
}
 
// 建造者的具体实现,这里是要建造出一个胖子
public class FatPersonBuilder : Builder
{
  public override void BuildHead()
  {
    Person.Head = "胖子的脑袋";
  }
 
  public override void BuildBody()
  {
    Person.Body = "胖子的身体";
  }
 
  public override void BuildArm()
  {
    Person.Head = "胖子的胳膊";
  }
 
  public override void BuildLeg()
  {
    Person.Head = "胖子的腿";
  }
}
 
// 建造者模式中的指挥者
public class PersonDirector
{
  Builder builder;
  public PersonDirictor(Builder personBuilder)
  {
    builder = personBuilder;
  }
 
  // 指挥创建一个人的过程,并返回创建成功的产品
  public Person BuildPerson()
  {
    builder.BuildHead();
    builder.BuildBody();
    builder.BuildArm();
    builder.BuildLeg();
 
    return builder.GetPerson();
  }
}

   

4. 模式总结

  4.1 优点

    4.1.1 用户只需要指定要建造的类型就可以得到它们,而具体的建造过程和细节不需要知道。
    4.1.2 建造代码与表示相分离,如果要改变一个产品的内部表示,只要再定义一个新的具体的建造者就可以了。
    4.1.3 建造过程由指挥者来控制,建造细节由一个抽象类来控制,对于实现建造细节的具体类来说,不会遗漏某一个步骤。

  4.2 缺点

    以上例子说明,现在我要增加产品的一个细节,如把创建脚的过程也添加进来,看我们需要改哪些类。Buider,FatPersonBuilder,ThinPersonBuilder(甚至更多,如果你实现了TallPersonBuilder,ShortPersonBuilder等),PersonDirector,我们对修改也就开放了。

  4.3 实用范围
    4.3.1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

    4.3.2 当复杂对象的部件相对稳定,不会发生变化时

    本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C#.NET频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程