设计模式之笔记--建造者模式(Builder)

建造者模式(Builder)

定义

       建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

类图

描述

Builder:定义一个建造者抽象类,以规范产品对象的各个组成部分的建造。这个接口规定要实现对象的哪些部分的创建,并不涉及具体的对象部件的创建。

ConcreteBuilder:继承Builder,针对不同的业务逻辑,具体化对象的各部分的创建。在建造过程完成后,提供产品的实例。

Director:调用具体建造者来创建对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

Product:要创建的对象。

建造者模式仅仅只比工厂模式多了一个"Director类"的角色。

应用场景

      以生产轿车为例,建造者负责生产汽车的各个部件,而指挥者负责指挥建造者按流程组装轿车。

    /// <summary>
    /// 发动机
    /// </summary>
    public class Engine
    {
        public string Description { get; set; }
    }

    /// <summary>
    /// 车体结构
    /// </summary>
    public class Body
    {
        public string Description { get; set; }
    }

    /// <summary>
    /// 车轮
    /// </summary>
    public class Wheel
    {
        public string Description { get; set; }
    }

    /// <summary>
    /// 汽车
    /// </summary>
    public class Car
    {
        public Body body { get; set; }
        public Engine engine { get; set; }
        public Wheel wheel { get; set; }
    }

    /// <summary>
    /// 建造者接口
    /// </summary>
    public interface IBuilder
    {
        void BuildBody();
        void BuildEngine();
        void BuildWheel();
        Car CreateCar();
    }

    /// <summary>
    /// 奥迪建造者
    /// </summary>
    public class BuilderAudi : IBuilder
    {
        private Car car = new Car();

        public void BuildBody()
        {
            car.body = new Body() { Description = "奥迪的车身结构." };
            Console.WriteLine(string.Format("安装{0}", car.body.Description));
        }

        public void BuildEngine()
        {
            car.engine = new Engine() { Description = "奥迪的发动机." };
            Console.WriteLine(string.Format("安装{0}", car.engine.Description));
        }

        public void BuildWheel()
        {
            car.wheel = new Wheel() { Description = "奥迪的车轮." };
            Console.WriteLine(string.Format("安装{0}", car.wheel.Description));
        }

        public Car CreateCar()
        {
            Console.WriteLine("奥迪车安装完成.");
            return car;
        }
    }

    /// <summary>
    /// 奔驰建造者
    /// </summary>
    public class BuilderBenz : IBuilder
    {
        private Car car = new Car();

        public void BuildBody()
        {
            car.body = new Body() { Description = "奔驰的车身结构." };
            Console.WriteLine(string.Format("安装{0}", car.body.Description));
        }

        public void BuildEngine()
        {
            car.engine = new Engine() { Description = "奔驰的发动机." };
            Console.WriteLine(string.Format("安装{0}", car.engine.Description));
        }

        public void BuildWheel()
        {
            car.wheel = new Wheel() { Description = "奔驰的车轮." };
            Console.WriteLine(string.Format("安装{0}", car.wheel.Description));
        }

        public Car CreateCar()
        {
            Console.WriteLine("奔驰车安装完成.");
            return car;
        }
    }

    /// <summary>
    /// 指挥者
    /// </summary>
    public class Director
    {
        public void Constrcut(IBuilder builder)
        {
            builder.BuildBody();
            builder.BuildEngine();
            builder.BuildWheel();
        }
    }

 

posted @ 2016-03-25 14:10  sunny906  阅读(1735)  评论(0编辑  收藏  举报