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);
                
            }
  • 相关阅读:
    [转]windows7远程桌面连接失败:发生身份验证错误。要求的函数不受支持
    SNMP协议学习笔记
    Sublime for MacOS 使用技巧
    Git常用操作
    罗技K380连接Win10(MacBookPro双系统)系统失败
    Git知识点汇总
    开发工作中提高效率的一些方式
    css
    IO多路复用
    进程
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2988474.html
Copyright © 2011-2022 走看看