博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#设计模式——生成器模式(Builder Pattern)
阅读量:6438 次
发布时间:2019-06-23

本文共 1750 字,大约阅读时间需要 5 分钟。

一、概述

在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的。生成器模式可以处理这类对象的构建,它提供了一种封装机制来隔离各类子对象的变化,从而保证系统的稳定。
二、生成器模式
生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其结构图如下:

Builder为创建Product对象的各个子对象指定抽象接口。

ConcreteBuilder实现了Builder接口,用于创建Product对象的各个子对象。
Director使用Builder来创建Product对象。
Product表示被构造的复杂对象。
三、示例
我们以普通汽车和高级汽车的创建为例来展示一下生成器模式的应用。
首先创建抽象的Builder

1     interface ICarBuilder2     {3         void BuilderWheels();4         void BuilderWindows();5     }

接着创建普通汽车的Builder和高级汽车的Builder

1     public class BasicBuilder : ICarBuilder 2     { 3         public void BuilderWheels() 4         { 5             Console.WriteLine("Builder Basic Wheels"); 6         } 7  8         public void BuilderWindows() 9         {10             Console.WriteLine("Builder Basic Windows");11         }12     }13 14     public class AdvancedBuilder : ICarBuilder15     {16         public void BuilderWheels()17         {18             Console.WriteLine("Builder Advanced Wheels");19         }20 21         public void BuilderWindows()22         {23             Console.WriteLine("Builder Advanced Windows");24         }25     }

然后创建汽车建造工厂,它使用Builder来创建不同种类的汽车

1     class CarFactory 2     { 3         public ICarBuilder Builder { get; set; } 4  5         public CarFactory(ICarBuilder builder) 6         { 7             Builder = builder; 8         } 9 10         public void CreateCar()11         {12             Builder.BuilderWheels();13             Builder.BuilderWindows();14         }15     }

最后看一下如何调用

1     static void Main(string[] args)2     {3         CarFactory game = new CarFactory(new BasicBuilder());4         game.CreateCar();5         game.Builder = new AdvancedBuilder();6         game.CreateCar();7         Console.ReadLine();8     }
 
 

转载地址:http://hxzwo.baihongyu.com/

你可能感兴趣的文章
如何基于Spark进行用户画像?
查看>>
光伏发电对系统冲击大 “十三五”电力规划重点增强调峰能力
查看>>
全球19家值得关注的物联网安全初创企业
查看>>
Android下的junit 单元测试
查看>>
这几个在搞低功耗广域网的,才是物联网的黑马
查看>>
主流or消亡?2016年大数据发展将何去何从
查看>>
《大数据分析原理与实践》一一第3章 关联分析模型
查看>>
《挖掘管理价值:企业软件项目管理实战》一2.4 软件设计过程
查看>>
Capybara 2.14.1 发布,Web 应用验收测试框架
查看>>
ExcelJS —— Node 的 Excel 读写扩展模块2
查看>>
《数字短片创作(修订版)》——第一部分 剧本创作 第1章 数字短片创意技法 剧本创作的构思...
查看>>
MIT 学生挑战新泽西索取挖矿程序源代码的要求
查看>>
实践 | 不同行业WMS选型策略及需要注意的一些问题
查看>>
MaxCompute与OSS非结构化数据读写互通(及图像处理实例)
查看>>
【F3简介】一张图看懂FPGA-F3实例
查看>>
bash环境(变量与bash配置文件)
查看>>
Server Hard drive mode
查看>>
smb服务器配置过程遇到错误及解决
查看>>
java杂乱
查看>>
在Linux上安装Python3.6.1
查看>>