首页 > 编程语言 >C# 建造者模式

C# 建造者模式

时间:2023-03-04 23:58:03浏览次数:24  
标签:Product C# void 建造 product 模式 Add override public

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 适用场景:建造者模式是在当创建复杂对象的算法,应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

示例代码:

/// <summary>
/// 建造者
/// </summary>
abstract class Builder
{
public abstract void BuilderPartA();
public abstract void BuilderPartB();
public abstract Product GetResult();
}

class ConcreteBuilder1 : Builder
{
private Product product = new Product();
public override void BuilderPartA()
{
product.Add("部件A");
}

public override void BuilderPartB()
{
product.Add("部件B");
}

public override Product GetResult()
{
return product;
}
}

class ConcreteBuilder2 : Builder
{
private Product product = new Product();
public override void BuilderPartA()
{
product.Add("部件X");
}

public override void BuilderPartB()
{
product.Add("部件Y");
}

public override Product GetResult()
{
return product;
}
}

class Director
{
public void Construct(Builder builder)
{
builder.BuilderPartA();
builder.BuilderPartB();
}
}

class Product
{
IList<string> parts = new List<string>();
public void Add(string part)
{
parts.Add(part);
}

public void Show()
{
Console.WriteLine("\n产品 创建----");
foreach (string part in parts)
{
Console.WriteLine(part);
}
}
}

static void Main(string[] args)
{
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
Console.Read();
}

 

标签:Product,C#,void,建造,product,模式,Add,override,public
From: https://www.cnblogs.com/KevinSteven/p/17179527.html

相关文章

  • Effective Project Management 01
    whatisaprojectdefinition:DefiningaProjectAprojectisasequenceofunique,complex,and connectedactivitieshavingonegoalorpurposeand thatmus......
  • c#中通过Combox控件改变Rictextbox字体相关内容
    1publicpartialclassForm1:Form2{3publicForm1()4{5InitializeComponent();67}......
  • K8S CKA 1.26 模拟环境 实验环境(一键导入) Kubernetest v1.26题库
    K8SCKA1.26考试环境,按照CKA最新原题搭建的,模拟环境已集成考题,可直接模拟练习,做题实操。资料包含:2023年3月最新题库+答案解析+考试笔记+模拟环境+技术支持+在线辅导答疑......
  • scite 脚本
    自动转换\n分隔多行文本到字符串functionmTextToCString()ifoutputthenoutput:ClearAll()endlocal__allText_=editor:GetText()__allText_=s......
  • 【水下图像增强】Enhancing Underwater Imagery using Generative Adversarial Networ
    原始题目EnhancingUnderwaterImageryusingGenerativeAdversarialNetworks中文名称使用GAN增强水下图像发表时间2018年1月11日平台ICRA2018......
  • Net6 EFcore框架介绍
    1、简介EFcore,可用使得开发人员不需要再去关注数据库的实现,全都由代码进行生成这样有利于减少工作量、数据库快速迁移...2、上手搭建架构(这个图是做......
  • JavaScript判断变量类型的四种方法
    typeof(根据二进制判断):常用于判断基础数据类型,对于引用数据类型除了function返回‘function’,其余都返回‘object’(typeofnull===object)instanceof:主要用于区分引......
  • C#外观模式
    定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。应用场景:1、在设计初期阶段,应该要有意识的将不同的两个层分......
  • ABC292解题报告
    比赛传送门E.Transitivity题意:有一张有向图,你需要在其中添加若干条边,满足对于任意\(a\tob,b\toc\),都有\(a\toc\)。求最少的添加边数。\(n,m\le2000\)。首先可......
  • Django源码-startproject
    Django源码-startprojectDjango的所有命令都位于django/django/core/management/commands/目录下一命令目录django-adminstartprojectproject_name这个命令在源码里......