zoukankan      html  css  js  c++  java
  • C# 设计模式(5)建造者模式

    建造者模式

    1. 复杂对象创建,包含多步骤

    2. 建造流程相对固定

    代码实现:造车

    模型:

    namespace BuilderPattern.Models
    {
        public class Engine
        {
            public string Name { get; set; }
        }
        public class Wheel
        {
            public string Name { get; set; }
        }
        public class Light
        {
            public string Name { get; set; }
        }
        public class Car
        {
            public Car(Engine engine,Wheel wheel,Light light)
            {
                
            }
            public string Name { get; set; }
        }
    }
    

    建造者:

        public abstract class AbstractBuilder
        {
           public abstract void BuildEngine();
           public abstract void BuildWheel();
           public abstract void BuildLight();
           public abstract Car BuildCar();
        }
        public class BuilderTesla:AbstractBuilder
        {
            private Engine _engine = null;
            private Wheel _wheels = null;
            private Light _lights = null;
    
            public override void BuildEngine()
            {
                _engine = new Engine(){Name = "Tesla_Engine"};
                Console.WriteLine($"{this.GetType().Name} build {_engine.Name}");
            }
    
            public override void BuildWheel()
            {
                _wheels = new Wheel() { Name = "Tesla_Wheels" };
                Console.WriteLine($"{this.GetType().Name} build {_wheels.Name}");
            }
    
            public override void BuildLight()
            {
                _lights = new Light() { Name = "Tesla_Light" };
                Console.WriteLine($"{this.GetType().Name} build {_lights.Name}");
            }
    
            public override Car BuildCar()
            {
                var car = new Car(_engine,_wheels,_lights) { Name = "Tesla_Model Y" };
                Console.WriteLine($"{this.GetType().Name} build {car.Name}");
                return car;
            }
        }
    

    导演:

        public class Director
        {
            private readonly AbstractBuilder _abstractBuilder;
    
            public Director(AbstractBuilder abstractBuilder)
            {
                _abstractBuilder = abstractBuilder;
            }
    
            public Car GetCar()
            {
                _abstractBuilder.BuildEngine();
                _abstractBuilder.BuildWheel();
                _abstractBuilder.BuildLight();
    
               var car = _abstractBuilder.BuildCar();
    
               return car;
            }
        }
    

    上层调用:

        class Program
        {
            static void Main(string[] args)
            {
                BuilderTesla builderTesla = new BuilderTesla();
                Director director = new Director(builderTesla);
                director.GetCar();
            }
        }
    

    结果:

  • 相关阅读:
    Mini2440裸机开发之MMU
    Mini2440裸机开发之IIC
    Mini2440裸机开发之SPI
    Mini2440裸机开发之存储器控制器
    Mini2440裸机开发之模数转换开发
    Mini2440裸机开发之LCD编程(GB2312、ASCII字库制作)
    Python pandas df.iloc[:, 0] 取确定列值作双轴图
    python plot 画双坐标轴 设置百分比展示 和字体等细节
    python Sqlserver数据库画双轴图
    windows下Idea中用Python访问oracle数据库的方法
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14067560.html
Copyright © 2011-2022 走看看