博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说设计模式~建造者模式(Builder)
阅读量:6331 次
发布时间:2019-06-22

本文共 2318 字,大约阅读时间需要 7 分钟。

建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC何尝不是,我们的MVVM又何尝不是呢,我们做软件的,换肤是常有的事,其实换肤的实现不就是建造者模式最好的体现吗,呵呵.

定义

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

何时能用到它?

1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。

建造者模式的结构图

建造者模式实现说明

1 Person:为一个主对象,它可能很大,很复杂。
2 Man:为Person下的一个分支,一个子类,本例中指男人对象
3 PersonDirector:为建造者模式中的指导者,它决定的创建产品的过程,顺序
4 PersonBuilder:实现建造过程所需要的行为接口,PersonDirector中会用到它

5 ManBuilder:这是一个具体的执行者,它可能有多个,每个执行者负责自己的部分

建造者模式的C#实现

public class Person    {        public string Name { get; set; }        public short Gander { get; set; }        public String Head { get; set; }        public String Body { get; set; }        public String Foot { get; set; }        public void SetHead(string content) { Console.WriteLine(content); Head = content; }        public void SetBody(string content) { Console.WriteLine(content); Body = content; }        public void SetFoot(string content) { Console.WriteLine(content); Foot = content; }        public override string ToString()        {            return string.Format("Head={0},Body={1},Foot={2}", Head, Body, Foot);        }    }    public class Man : Person    {        public Man()        {            this.Gander = 1;        }    }    public interface PersonBuilder    {        void buildHead();        void buildBody();        void buildFoot();        Person buildPerson();    }    public class PersonDirector    {        public Person constructPerson(PersonBuilder pb)        {            pb.buildHead();            pb.buildBody();            pb.buildFoot();            return pb.buildPerson();        }    }    public class ManBuilder : PersonBuilder    {        Person person;        public ManBuilder()        {            person = new Man();        }        public void buildBody()        {            person.SetBody("建造男人的身体");        }        public void buildFoot()        {            person.SetFoot("建造男人的脚");        }        public void buildHead()        {            person.SetHead("建造男人的头");        }        public Person buildPerson()        {            return person;        }     }}

下面是调用程序

PersonDirector pd = new PersonDirector();    Person person = pd.constructPerson(new ManBuilder());    Console.WriteLine(person.ToString());

程序截图

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>
SQL some any all
查看>>
电子书下载:Programming Windows Identity Foundation
查看>>
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>
财付通和支付宝资料收集
查看>>
PHPCMS V9数据库表结构分析
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
理解 IEnumerable 与 IEnumerator
查看>>
NHibernate 2.0 Beta 1 Released和一些工具
查看>>
【每天一个Linux命令】12. Linux中which命令的用法
查看>>
软件接口数据一致性机制
查看>>
微服务架构介绍和RPC框架对比
查看>>
Debian下使用OpenLDAP 管理端
查看>>
泛型排序器TComparer
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...
查看>>
Adobe驳斥Flash过度耗电论 称HTML5更耗电
查看>>