zoukankan      html  css  js  c++  java
  • 建造者模式(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

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

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

  • 相关阅读:
    各种排序算法的时间复杂度和空间复杂度
    fork/join框架
    全文检索之solr学习
    【设计模式最终总结】概述、分类、原则
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理
    下拉列表自己封装的
    下拉列表
    一个原生的JavaScript拖动方法
    JavaScript的jsonp
    angular2 的依赖注入
  • 原文地址:https://www.cnblogs.com/mointor/p/5204959.html
Copyright © 2011-2022 走看看