• 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     } 
  • 相关阅读:
    git 错误 fatal: Not a valid object name: 'master'.
    SQL: select一组数据,concat同表同列的数据
    Linux curl usage
    Regular Expression
    浅谈Linux Process status,环境锁
    浅谈Manpage
    Java文件读写详解。 附txt乱码问题, html乱码问题
    在ubuntu 18.04下装有线守护wg
    centOS 7 换ssh端口
    如何把DEBIAN变成UBUNTU-DESKTOP最少化安装
  • 原文地址:https://www.cnblogs.com/saville/p/2547475.html
Copyright © 2020-2023  润新知