首页 > 代码库 > 说说设计模式~建造者模式(Builder)
说说设计模式~建造者模式(Builder)
返回目录
建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如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());
程序截图
返回目录
说说设计模式~建造者模式(Builder)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。