• C#设计模式——生成器模式(Builder Pattern)


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

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

    1     interface ICarBuilder
    2     {
    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 : ICarBuilder
    15     {
    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     } 
    复制代码
     
     
  • 相关阅读:
    来自1068
    耻辱的时间戳(笑哭)
    依然排序
    呵呵
    好吧,第二篇
    来自机房的第一篇博客
    Shader-水流效果
    unity中虚拟摇杆的实现
    (转载)Unity3d中的属性(Attributes)整理
    C#冒泡排序法及优化
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/6007907.html
Copyright © 2020-2023  润新知