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();
            }
        }
    

    结果:

  • 相关阅读:
    【jQuery】用jQuery给文本框添加只读属性【readOnly】
    解决embed标签显示在div上层【转藏】
    width:100% 和 max-width:100%; 有区别吗【转藏】
    一位资深程序员的独白
    jQuery 取值、赋值的基本方法【转藏】
    js判断手机端操作系统(Andorid/IOS)
    PhpStrom 和 wamp 配置 xdebug
    php 中 ?? 和 empty 的 区别
    phpSpreadSheet 中 使用的 一些坑
    html td 限制 高度 和 宽度
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14067560.html
Copyright © 2011-2022 走看看