原文:乐在其中设计模式(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. POJ 4003 Bob’s Race && HDU4123 Bob’s Race (dfs+rmq)

    Bob’s Race Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 378   Accepted: 119 Descript ...

  2. Learning Cocos2d-x for WP8(2)——深入刨析Hello World

    原文:Learning Cocos2d-x for WP8(2)--深入刨析Hello World cocos2d-x框架 在兄弟篇Learning Cocos2d-x for XNA(1)——小窥c ...

  3. art patchoat

    Add patchoat tool to Art. Add a new executable called patchoat to art. This tool takes alreadycompil ...

  4. Cantor的数表 【找规律】

    小俞同学,近期勤学苦练数学,对一种数表产生了兴趣. 数表例如以下: 1/1 1/2 1/3 1/4 1/5 2/1 2/2 2/3 2/4 3/1 3/2 3/3 4/1 4/2 5/1 她冥思苦相了 ...

  5. 在spring MVC的controller中获取ServletConfig

    在使用SmartUpload进行文件上传时,须要用到srevletConfig: 假设是在servlet中写当然是非常easy实现的: private ServletConfig config; // ...

  6. UVa 884 - Factorial Factors

    题目:输出n!中素数因数的个数. 分析:数论.这里使用欧拉筛法计算素数,在计算过程中求解就可以. 传统筛法是利用每一个素数,筛掉自己的整数倍: 欧拉筛法是利用当前计算出的全部素数,乘以当前数字筛数: ...

  7. [置顶] ios 时间定时器 NSTimer应用demo

    原创文章,转载请注明出处:http://blog.csdn.net/donny_zhang/article/details/9251917 demo功能:ios NSTimer应用demo .ipho ...

  8. Study note for Continuous Probability Distributions

    Basics of Probability Probability density function (pdf). Let X be a continuous random variable. The ...

  9. Git在下搭建下环境的工具

    (本文稿来自:http://www.open-open.com/news/view/55387) Git是一个快速,可扩展的,分布式的版本控制系统.Git服务器起初是专为Linux开发,后来移植至Wi ...

  10. 在Button上、下、左、右位置加入图片和文字

    转载请注明出处:http://blog.csdn.net/droyon/article/details/37564419 非常多人有如标题所述的需求,并且大多数人採用了自己定义组件攻克了需求,事实上还 ...