zoukankan      html  css  js  c++  java
  • Builder模式经典模式

      public class Vehicle
        {
            public IEnumerable<string> Wheels { get; set; }
            public IEnumerable<string> Lights { get; set; }
        }
        /// <summary>
        /// abstract builder
        /// </summary>
        public abstract class VehicleBuilderBase
        {
            public Vehicle Vehicle { get; protected set; }
    
            public virtual void Create()
            {
                Vehicle = new Vehicle();
            }
    
            public abstract void AddWheels();
            public abstract void AddLights();
        }
     /// <summary>
        /// concrete builder
        /// </summary>
        public class CarBuilder : VehicleBuilderBase
        {
            #region VehicleBuilderBase Members
    
            public override void AddWheels()
            {
                Vehicle.Wheels = new string[] {"front", "front", "back", "back"};
            }
    
            public override void AddLights()
            {
                Vehicle.Lights = new string[] { "front", "front", "back", "back" };
            }
    
            #endregion
        }
    
        /// <summary>
        /// concrete builder
        /// </summary>
        public class BicycleBuilder : VehicleBuilderBase
        {
            #region VehicleBuilderBase Members
    
            public override void AddWheels()
            {
                Vehicle.Wheels = new string[] { "front", "back" };
            }
    
            public override void AddLights()
            {
                Vehicle.Lights = null;
            }
    
            #endregion
        }

    调用

       [TestMethod]
            public void BuildUp()
            {
                var maker = new VehicleMaker();
                maker.Builder = new CarBuilder();
                maker.Construct();
                Assert.AreEqual<int>(4, maker.Vehicle.Wheels.Count());
                Assert.AreEqual<int>(4, maker.Vehicle.Lights.Count());
                maker.Builder = new BicycleBuilder();
                maker.Construct();
                Assert.AreEqual<int>(2, maker.Vehicle.Wheels.Count());
                Assert.IsNull(maker.Vehicle.Lights);
                
            }
  • 相关阅读:
    IoC和AoP
    学习树
    Avalon Framework概念
    java利用WatchService实时监控某个目录下的文件变化并按行解析
    [DBT-08001] 无法检查可用内存。
    C#之http协议与soap协议之间的区别
    C#之ActionResult 详解
    C#实现连接池
    C#MVC之传入字典的模型项为 null,但此字典需要类型“System.Decimal”的非 null 模型项。
    Func的介绍
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2988474.html
Copyright © 2011-2022 走看看