建造者模式

来源:互联网 发布:winpe nvme 网络 编辑:程序博客网 时间:2024/06/04 18:12
namespace 建造者模式{    /* 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示*/    class Program    {        static void Main(string[] args)        {            ConcreteBuilder builder = new ConcreteBuilder();            HtmlDirector director = new HtmlDirector();            director.ConstructHtml(builder);        }    }    public class Html    {        public string Head { get; set; }        public string Body { get; set; }        public void SetHead(string content)        {            this.Head = content;            Console.WriteLine("head=:" + content);        }        public void SetBody(string content)        {            this.Body = content;            Console.WriteLine("body=:" + content);        }        public override string ToString()        {            return string.Format("head={0}\r\nbody={1}", this.Head, this.Body);        }    }    /// <summary>    /// 抽象建造者(定义需要建造的功能模版)    /// </summary>    public interface IHtmlBuilder    {        void BuildHeader();        void BuilderBody();        Html BuildHtml();    }    /// <summary>    /// 具体建造者 (实现要建造的具体功能,建造的具体过程和细节不用外部知道,建造是稳定的)    /// </summary>    public class ConcreteBuilder : IHtmlBuilder    {        private Html html;        public ConcreteBuilder()        {            html = new Html();        }        public void BuildHeader()        {            html.SetHead("<header></header>");        }        public void BuilderBody()        {            html.SetBody("<body></body>");        }        public Html BuildHtml()        {            return html;        }    }    /// <summary>    /// 指导者 (具体怎么建造、建造流程、顺序)    /// </summary>    public class HtmlDirector    {        /// <summary>        /// 构造具体的对象        /// </summary>        /// <param name="builder">建造者</param>        /// <returns>构造完毕的实体</returns>        public Html ConstructHtml(IHtmlBuilder builder)        {            //指导者指挥 建造过程            builder.BuildHeader();            builder.BuilderBody();            return builder.BuildHtml();        }    }}

运行结果:

0 0