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);
                
            }
  • 相关阅读:
    PHP MVC运用
    17个方法防止dedeCMS织梦网站被黑挂木马
    少有人走的路
    你有选择的自由
    产品经理需要掌握哪些能力
    产品经理的工作流程
    Weave实现跨主机容器互联
    转载【docker】CMD ENTRYPOINT 的使用方法
    Docker:发布镜像问题denied: requested access to the resource is denied的解决方法
    Docker Dockerfile基本配置
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2988474.html
Copyright © 2011-2022 走看看