建造者模式(Builder)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式(Builder)相关的知识,希望对你有一定的参考价值。

  建造者模式,其实说白了就是将复杂的对象的创建过程抽象出来,针对不同的创建过程,产生不同的对象。

  建造者隐藏了产品的产生过程,也就是产生产品的过程,如果要是改变产品的内部表示,只需要在定义一个具体的建造者就可以了。

  下面给出UML图:

  技术分享

  下面我们使用代码来展示一下建造者模式的使用,很简单的实例,我们以建造楼房为例,讲述建造者模式更为恰当。

  首先我们列出抽象的楼房建造者,代码如下:

技术分享
namespace Builder
{
    public abstract class RoomBuilder
    {
        public abstract void CreateRoomFrame();
        public abstract void BuilderRoom();
        public abstract void DecoratingRoom();
        public abstract Room GetRoom();
    }
}
RoomBuilder

  具体的简单以及复杂楼房建造者的实现,代码如下:

技术分享
namespace Builder.Concrete
{
    public class SimpleRoomBuilder : RoomBuilder
    {
        private Room room = new Room();
        public override void CreateRoomFrame()
        {
            room.Frame = "Simple Frame";
        }

        public override void BuilderRoom()
        {
            room.BuilderMaterial = "No Using Rebar";
        }

        public override void DecoratingRoom()
        {
            room.Decorating = "Simple Decorating";
        }

        public override Room GetRoom()
        {
            return room;
        }
    }
}
SimpleRoomBuilder
技术分享
namespace Builder.Concrete
{
    public class ComplexRoomBuilder : RoomBuilder
    {
        private Room room = new Room();
        public override void CreateRoomFrame()
        {
            room.Frame = "Complex Frame";
        }

        public override void BuilderRoom()
        {
            room.BuilderMaterial = "Using Rebar";
        }

        public override void DecoratingRoom()
        {
            room.Decorating = "Complex Decorating";
        }

        public override Room GetRoom()
        {
            return room;
        }
    }
}
ComplexRoomBuilder

  楼房类的代码如下:

技术分享
namespace Builder
{
    public class Room
    {
        public string Frame { set; get; }
        public string BuilderMaterial { set; get; }
        public string Decorating { set; get; }

        public override string ToString()
        {
            return this.Frame + "\r\n" + this.BuilderMaterial + "\r\n" + this.Decorating;
        }
    }
}
Room

  指挥者类的实现

技术分享
namespace Builder
{
    public class Director
    {
        public Director(RoomBuilder builder)
        {
            builder.CreateRoomFrame();
            builder.BuilderRoom();
            builder.DecoratingRoom();
        }
    }
}
Director

  main方法的实现

技术分享
namespace Builder
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleRoomBuilder concrete1 = new SimpleRoomBuilder();

            Director director = new Director(concrete1);
            Room room = concrete1.GetRoom();
            Console.WriteLine(room.ToString());

            Console.ReadKey();
        }
    }
}
Main

  以上就是建造者模式的简单的实例,建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

  本篇文章建造者模式至此,谢谢您收看我的博客。

以上是关于建造者模式(Builder)的主要内容,如果未能解决你的问题,请参考以下文章

[05]Go设计模式:建造者模式(Builder Pattern)

建造者模式-Builder

建造者模式(Builder Pattern)

设计模式-建造者模式(Builder)

23种设计模式之建造者模式代码实例

Builder 建造者模式