首页 > 编程语言 >设计模式之[构建者模式(Builder)]-C#

设计模式之[构建者模式(Builder)]-C#

时间:2023-04-22 12:58:53浏览次数:32  
标签:return C# Builder computer 构建 override 设计模式 public

说明:构建一个大对象时,可以分解成一个部分一个部分的构建,比如一台电脑由CUP、内存、主板、屏幕等,这些配件本身就是一个复杂的制造过程,一个一个构建后然后才组装成一台新的电脑。 步骤 1、定义要构建的对象——电脑 2、定义一个抽象的构建器,内部的每个抽象方法构建一个配件并返回构建器本身,目的是为了链式调用 3、构建器具体实现,如:三星构建器、戴尔构建器, 4、构建复杂对象是需要有顺序的,比如有些配件必须先构建,这时需要一个导演来指挥整个构建顺序 5、客户端使用构建器。创建一个导演实例和一个具体构建器实例如三星,然后把构建实例对象丢给导演去构建出电脑。  

  1 var director = new Director();
  2 var sanxingBuilder = new SanxingBuilder();
  3 director.Build(sanxingBuilder);
  4 var sanxingComputer = sanxingBuilder.GetComputer();
  5 Console.WriteLine(sanxingComputer);
  6 
  7 var dellBuilder = new DellBuilder();
  8 director.Build(dellBuilder);
  9 var dellComputer = dellBuilder.GetComputer();
 10 Console.WriteLine(dellComputer);
 11 
 12 //1、定义要构建的对象 电脑
 13 public class Computer
 14 {
 15     public string Cup { get; set; } = string.Empty;
 16     public string Memory { get; set; } = string.Empty;
 17     public string Mainbord { get; set; } = string.Empty;
 18     public string Screen { get; set; } = string.Empty;
 19 
 20     public override string ToString()
 21     {
 22         return $"Cup:{Cup},Memory:{Memory},Mainbord:{Mainbord},Screen:{Screen}";
 23     }
 24 }
 25 
 26 //2、定义一个抽象构建器
 27 public abstract class Builder
 28 {
 29     public abstract Builder BuildCpu();//返回类型是自己(Builder),这样就支持链式调用
 30     public abstract Builder BuildMemory();
 31     public abstract Builder BuildMainbord();
 32     public abstract Builder BuildScreen();
 33 
 34     public abstract Computer GetComputer();
 35 }
 36 
 37 //3、实现构建起 三星
 38 public class SanxingBuilder : Builder
 39 {
 40     private readonly Computer _computer = new Computer();
 41 
 42     public override Builder BuildCpu()
 43     {
 44         _computer.Cup = "三星 CUP";
 45         Console.WriteLine(_computer.Cup);
 46         return this;
 47     }
 48 
 49     public override Builder BuildMainbord()
 50     {
 51         _computer.Mainbord = "三星 CUP";
 52         Console.WriteLine(_computer.Mainbord);
 53         return this;
 54     }
 55 
 56     public override Builder BuildMemory()
 57     {
 58         _computer.Memory = "三星 Memory";
 59         Console.WriteLine(_computer.Memory);
 60         return this;
 61     }
 62 
 63     public override Builder BuildScreen()
 64     {
 65         _computer.Screen = "三星 Screen";
 66         Console.WriteLine(_computer.Screen);
 67         return this;
 68     }
 69 
 70     public override Computer GetComputer()
 71     {
 72         return _computer;
 73     }
 74 }
 75 
 76 //3实现 构建者 dell
 77 public class DellBuilder : Builder
 78 {
 79     private readonly Computer _computer = new Computer();
 80     public override Builder BuildCpu()
 81     {
 82         _computer.Cup = "戴尔 CUP";
 83         Console.WriteLine(_computer.Cup);
 84         return this;
 85     }
 86 
 87     public override Builder BuildMainbord()
 88     {
 89         _computer.Mainbord = "戴尔 Mainbord";
 90         Console.WriteLine(_computer.Mainbord);
 91         return this;
 92     }
 93 
 94     public override Builder BuildMemory()
 95     {
 96         _computer.Memory = "戴尔 Memory";
 97         Console.WriteLine(_computer.Memory);
 98         return this;
 99     }
100 
101     public override Builder BuildScreen()
102     {
103         _computer.Screen = "戴尔 Screen";
104         Console.WriteLine(_computer.Screen);
105         return this;
106     }
107 
108     public override Computer GetComputer()
109     {
110         return _computer;
111     }
112 }
113 
114 //4、导演角色、编排构建顺序
115 public class Director
116 {
117     public void Build(Builder builder)
118     {
119         builder
120             .BuildCpu()
121             .BuildMainbord()
122             .BuildMemory()
123             .BuildScreen();
124     }
125 }

 

标签:return,C#,Builder,computer,构建,override,设计模式,public
From: https://www.cnblogs.com/wanghaibin/p/17342783.html

相关文章

  • C ++各个数据类型的输入输出
    C++中各个数据类型的输入输出主要使用iostream库和格式化输入输出函数printf、scanf等,下面是各个数据类型的输入输出方式:1.整型:使用cin和cout进行输入输出,或者使用scanf和printf进行输入输出。intn;cin>>n;cout<<n<<endl;scanf("%d",&n);printf("%d\n",n);2.浮点型:使......
  • 教我怎么用docker的network
    Docker提供了一种为容器创建和管理网络以相互通信的方法。创建Docker网络有多种方法,最简单的方法是使用dockernetworkcreate命令。此命令创建一个具有指定名称和驱动程序的新网络。驱动程序指定网络上的容器如何相互通信。最常见的驱动程序是桥接驱动程序,它用于为单个......
  • Chapter4 朴素贝叶斯
    朴素贝叶斯1.简介朴素贝叶斯是一种基于概率论的分类方法。它主要借助条件概率和贝叶斯公式来对样本进行分类。2.优缺点朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题。缺点:对于输入数据的准备方式较为敏感。适用数据类型:标称型数据。3......
  • C++调用自定义源文件函数
    C++调用自定义源文件函数的步骤如下:在需要调用函数的源文件中包含自定义源文件的头文件。例如,如果需要调用名为myfunc.cpp的自定义源文件中的函数,则需要在调用该函数的源文件中包含myfunc.h头文件。编译自定义源文件。如果使用命令行编译,可以使用以下命令编译自定义源文件并生成......
  • golang net/rpc inject data to service function
    在golang中,net/rpc库比较牛,只需要写函数,然后使用现成的ServerCodec就可以完成rpc服务了。但是有个问题,service函数的参数都是来自客户端的,如果服务器想为某个特殊的函数注入一些配置或状态参数,就不好弄了。解决方案:修改service函数,比如原来的参数是FuncArgs结构体,现在改成t......
  • C语言常见的加密库
    C语言加密库有很多,以下是一些常见的加密库:OpenSSL:一个功能强大的开源加密库,提供了各种加密算法和协议的实现,包括对称加密、公钥加密、数字签名和证书管理等。Libsodium:一个现代化的加密库,提供了高级加密、公钥加密、哈希函数等,被广泛用于网络通信、存储和加密货币等领域。Bota......
  • JavaScript加密库
    JavaScript加密库有很多,以下是一些常见的加密库:CryptoJS:一个纯JavaScript编写的加密库,提供了各种加密算法和编码方式的实现,包括对称加密、哈希函数、消息认证码、数字签名等。sjcl:一个JavaScript编写的加密库,提供了对称加密、公钥加密、哈希函数等,支持多种加密算法和模式。for......
  • c 数组名和指针的区别
    关于c中数组名和指针的区别我写了一下程序进行测试并就自己的理解做了详细的解释,供自己以后复习,大佬批评指正和需要的网友参考学习。环境:gcc(mingw或cygwin)代码:1#include<stdlib.h>2intmain(intargc,charconst*argv[])3{4intarr[10]={23456,3,4,5,6,......
  • 【c++】容器
    c++中容器的定义如下:数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的指针,这种对象类型叫容器。通俗的说容器就是保存其他对象的对象,这种“对象”还包含了一些列处理其他对象的方法,这也体现了容器类的一个好处,“容器类对特定代码重用问题的良好的解决方案”。容器另......
  • IDEA PyCharm 主题 Theme 花里胡哨
    Horizon首先这个主题叫Horizon,是从VSCODE里发现的。我喜欢花里胡哨,也喜欢简约和清新,这款主题我还是很中意的。值得开心的是IDEA和PyCharm里插件市场也有,搜索安装即可。效果:想要背景图,修改文字颜色样式就自己弄。......