原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

[索引页][源码下载]

乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

作者:webabcd





介绍

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





示例

用同样的构建过程创建Sql和Xml的Insert()方法和Get()方法。







MessageModel

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// Message实体类

    /// </summary>

    public class MessageModel

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="msg">Message内容</param>

        /// <param name="pt">Message发布时间</param>

        public MessageModel(string msg, DateTime pt)

        {

            this._message = msg;

            this._publishTime = pt;

        }



        private string _message;

        /**//// <summary>

        /// Message内容

        /// </summary>

        public string Message

        {

            get { return _message; }

            set { _message = value; }

        }



        private DateTime _publishTime;

        /**//// <summary>

        /// Message发布时间

        /// </summary>

        public DateTime PublishTime

        {

            get { return _publishTime; }

            set { _publishTime = value; }

        }

    }

}

SqlMessage

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// Sql方式操作Message

    /// </summary>

    public class SqlMessage

    {

        /**//// <summary>

        /// 获取Message

        /// </summary>

        /// <returns></returns>

        public List<MessageModel> Get()

        {

            List<MessageModel> l = new List<MessageModel>();

            l.Add(new MessageModel("SQL方式获取Message", DateTime.Now));



            return l;

        }



        /**//// <summary>

        /// 插入Message

        /// </summary>

        /// <param name="mm">Message实体对象</param>

        /// <returns></returns>

        public bool Insert(MessageModel mm)

        {

            // 代码略

            return true;

        }

    }

}

XmlMessage

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// Xml方式操作Message

    /// </summary>

    public class XmlMessage

    {

        /**//// <summary>

        /// 获取Message

        /// </summary>

        /// <returns></returns>

        public List<MessageModel> Get()

        {

            List<MessageModel> l = new List<MessageModel>();

            l.Add(new MessageModel("XML方式获取Message", DateTime.Now));



            return l;

        }



        /**//// <summary>

        /// 插入Message

        /// </summary>

        /// <param name="mm">Message实体对象</param>

        /// <returns></returns>

        public bool Insert(MessageModel mm)

        {

            // 代码略

            return true;

        }

    }

}

Operation

using System;

using System.Collections.Generic;

using System.Text;



using System.Reflection;



namespace Pattern.Builder

{

    /**//// <summary>

    /// 操作(Product)

    /// </summary>

    public class Operation

    {

        private string _type;

        private Dictionary<string, string> _dictionary;



        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="type">产品类型</param>

        public Operation(string type)

        {

            _dictionary = new Dictionary<string, string>();

            this._type = type;

        }



        /**//// <summary>

        /// 索引器

        /// </summary>

        /// <param name="key"></param>

        /// <returns></returns>

        public string this[string key]

        {

            get { return _dictionary[key]; }

            set { _dictionary[key] = value; }

        }



        /**//// <summary>

        /// 获得结果

        /// </summary>

        /// <returns></returns>

        public string GetResult()

        {

            Assembly assembly = Assembly.Load("Pattern.Builder");



            MethodInfo methodGet ]);

            ]), null);

            List<MessageModel> m = (List<MessageModel>)objGet;

            

            MethodInfo methodInsert ]);

            ])) });

            bool b = (bool)objInsert;



            ].PublishTime.ToString() + "<br />";

        }

    }

}

AbstractMessageBuilder

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// 抽象Message建造者(Builder)

    /// </summary>

    public abstract class AbstractMessageBuilder

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="type">产品类型</param>

        public AbstractMessageBuilder(string type)

        {

            this._operation = new Operation(type);

        }



        /**//// <summary>

        /// 操作(Product)

        /// </summary>

        protected Operation _operation;

        /**//// <summary>

        /// 操作(Product)

        /// </summary>

        public Operation Operation

        {

            get { return _operation; }

            set { _operation = value; }

        }



        /**//// <summary>

        /// 建造插入方法

        /// </summary>

        /// <param name="mm"></param>

        abstract public void BuilderInsert(MessageModel mm);



        /**//// <summary>

        /// 建造获取方法

        /// </summary>

        abstract public void BuilderGet();

    }

}

SqlMessageBuilder

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// SqlMessage建造者(ConcreteBuilder)

    /// </summary>

    public class SqlMessageBuilder : AbstractMessageBuilder

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        public SqlMessageBuilder()

            : base("sql")

        {

 

        }



        /**//// <summary>

        /// 建造Sql插入方法

        /// </summary>

        /// <param name="mm">Message实体对象</param>

        public override void BuilderInsert(MessageModel mm)

        {

            base._operation["insert"] = "SqlMessage|Insert|" + mm.Message + "|" + mm.PublishTime.ToString() + "";

        }



        /**//// <summary>

        /// 建造Sql获取方法

        /// </summary>

        public override void BuilderGet()

        {

            base._operation["get"] = "SqlMessage|Get";

        }

    }

}

XmlMessageBuilder

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// XmlMessage建造者(ConcreteBuilder)

    /// </summary>

    public class XmlMessageBuilder : AbstractMessageBuilder

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        public XmlMessageBuilder()

            : base("xml")

        {

 

        }



        /**//// <summary>

        /// 建造Xml插入方法

        /// </summary>

        /// <param name="mm">Message实体对象</param>

        public override void BuilderInsert(MessageModel mm)

        {

            base._operation["insert"] = "XmlMessage|Insert|"+mm.Message+"|"+mm.PublishTime.ToString()+"";

        }



        /**//// <summary>

        /// 建造Xml获取方法

        /// </summary>

        public override void BuilderGet()

        {

            base._operation["get"] = "XmlMessage|Get";

        }

    }

}

Message

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Builder

{

    /**//// <summary>

    /// 指导者(Director)

    /// </summary>

    public class Message

    {

        /**//// <summary>

        /// 调用具体建造者角色以创建产品对象

        /// </summary>

        /// <param name="messageBuilder">AbstractMessageBuilder</param>

        /// <param name="mm">Message实体对象</param>

        public void Construct(AbstractMessageBuilder messageBuilder, MessageModel mm)

        {

            messageBuilder.BuilderInsert(mm);

            messageBuilder.BuilderGet();

        }

    }

}

client

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;



using Pattern.Builder;



public partial class Builder : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Message m = new Message();



        AbstractMessageBuilder amb = new SqlMessageBuilder();

        m.Construct(amb, new MessageModel("插入", DateTime.Now));



        Response.Write(amb.Operation.GetResult());



        amb = new XmlMessageBuilder();

        m.Construct(amb, new MessageModel("插入", DateTime.Now));



        Response.Write(amb.Operation.GetResult());

    }

}

运行结果

类型为sql的执行结果:

True

SQL方式获取Message 2007-5-5 20:53:28

类型为xml的执行结果:

True

XML方式获取Message 2007-5-5 20:53:28





参考

http://www.dofactory.com/Patterns/PatternBuilder.aspx





OK

[源码下载]

乐在其中设计模式(C#) - 建造者模式(Builder Pattern)的更多相关文章

  1. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  2. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

  3. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  4. 设计模式-05建造者模式(Builder Pattern)

    1.模式动机 比如我们要组装一台电脑,都知道电脑是由 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘和鼠标组成,其中非常重要的一点就是这些硬件都是可以灵活选择,但是组装步骤都是大同小异(可以组一个 ...

  5. 【UE4 设计模式】建造者模式 Builder Pattern

    概述 描述 建造者模式,又称生成器模式.是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端无需知道复杂 ...

  6. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  7. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  8. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  9. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

    原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...

随机推荐

  1. Linux查看硬盘使用时间等信息

    查看硬盘信息的很多命令,都需要root权限,如果普通用户无法看到信息,请切换至root: 1.查看硬盘使用时间等信息 硬盘使用时间很重要,硬盘理论寿命是3万小时以上 $ sudo smartctl - ...

  2. HTML5 Canvas动画效果实现原理

    在线演示 使用HTML5画布可以帮助我们高速实现简单的动画效果.基本原理例如以下: 每隔一定时间绘制图形而且清除图形,用来模拟出一个动画过程,能够使用context.clearRect(0, 0, x ...

  3. nginx源代码分析--event事件驱动初始化

    1.在nginx.c中设置每一个核心模块的index ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]-> ...

  4. mongodb分页优化

    现在参与一个项目的开发,需要用java查询mongodb数据库,在这里分页用的skip sort 和limit结合,查询语句如下(已经在相关字段建立索引) DBCursor cursor = coll ...

  5. hdu4489(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4489 题意:给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 详细思路参考:http:/ ...

  6. 纯CSS实现各类气球泡泡对话框效果

    原文 纯CSS实现各类气球泡泡对话框效果 一.关于纯CSS实现气泡对话框 首先,来张大图: 上边这张黄黄的,大大的,圆圆的,有个小尾巴,文字内容有些YY的图片,就是使用纯CSS实现的气泡对话框效果,一 ...

  7. phpmailer【PHP邮件】的用法

    第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/ 第二,确认你的服务器系统已经支持socket ,通过phpinfo(); ...

  8. java名词,关键字

    抽象类:规定一个或多个抽象方法的类别本身必须定义为abstract,抽象类只是用来派生子类,而不能用它来创建对象. final类:又称“最终类”,它只能用来创建对象,而不能被继承,与抽象类刚好相反,而 ...

  9. java + memcached安装

    一:安装 (临时获取上手windows实验) 1.下载memcached.exe , 上F:\memcached\ 下 2.在CMD在输入 "F:\memcached\memcached.e ...

  10. 第五章_JSTL

    5.1.下载JSTL http://jstl.java.net 5.2.JSTL类库 类别 下属功能 URI 前缀 Core 变量支持 http://java.sun.com/jsp/jstl/cor ...