说说设计模式~建造者模式(Builder)

返回目录

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

定义

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

何时能用到它?

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

建造者模式的结构图

aaarticlea/png;base64,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" alt="" />

建造者模式实现说明

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 = ;
}
}
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());

程序截图

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcYAAAB/CAIAAAD6svV3AAAQ2UlEQVR4nO2d6ZNU1RmH+3NEIwpGMVGQRTZnhl2FYccFhn1QGZRdZZ0VYZDZAFEGZBl2QYgriIlLRDCK0RaMK1alKvmSSqpiKqWJfkiZv+Dmw+k5czjLe957+w7T0/f31Ftdt889271vzzOnb/fcSQUAAABiIvWXP32BQCAQiFgCSkUgEIjYIvWzPquyjKv6rrqq72oRXfqt7tJvTZd+a7rcvubqTKy9uv/aa0QMKP+5jIEV14oYVHHtoIqugyq7DqrsOriy6+DK6wZXXXdH1XV3VF0voqD6+oLqbgXV3QqruxXWdCus6V5Y072opnvRuu5F624oWnfDEBFP/GJoJm4cuv7GYZm4afj6m4ZvENFjxIYeI2p7jKjtMbL25pG1N4/cePPIjb8c1Rp3PvkrGXdtukXE3ZtuubvuVhGj63qOrus5ur7n6PqeY+p7janvNaahV3FDr+KG20SMbbxtbGPvsY29xzX2HtfUe1xTn3FNfcY39Rm/ue/4zX0nZKLfhC39Jmbi9klbZfSfvLX/5Kf6T35qwBQR2wZM2TbwHhFPD7z36UEy7ntmcGvccf/2TEzdXjB1e8HU5oKpzQXTmgunNRdO21FYsqOwZEdRyY6ikp1F03cWTd85ZPrOITN2Dpnx7FARM58dOnPXsJm7hs0SsXv4rN3DZ2dixJw9IkbO2TNy7l4Ro+buHVW6d1Rpy6jSljvnidh357x9dz0gYv/dD7bF6IcOZGL+gTHzD2ai7GBx2cHiskPFCw4VLzg0dsGhsQsOj3348DgRjxwZ98iR8SIWHhm/8LkJC5+bsEjE0YmLjk5cfHTi4qOTFh+dtPjYpCXHJi05NnnJsclLnxcxZenzU5YdF3HPchEn7l1+4t5HRfz6vsdkvHD/462x4oWpK17MxMoXp618adrKl6ateqkkEy+XrH55eiZemb7mlRki1r46Y+2rM0WUvzqr/OSs8pOzKk7Oqjg5u+LU7IpTsytPza48Nafy1Jyq10TMrXptbvXpudWnS6tPl9acLq15vbTm9Xk1r89bJ+I3Dzwh47cPrm+Lhza8IWJ+7Rvza98UUbbxzbKNb5VtfKvsybcWZOLtBZveflhE3e8ekVH/zkIRDe8sbHhnUcOZRQ1nFjWeWdR4ZnHju4ub3l3c9O4SEZvPLtl8dunms0u3nF265dzSLeeWbTm3bOu5ZVvfW7b1veVb31v+lIjfP7otE49te/+xpzPx+DPvP/7MByJWbP9gxfbzK7afX9F8fmXz+ZXNH65s/nDVjtbY+YfVMp79aI2IXR+t2fXxWhG7Py7f/XH57nT57nT5nnTFnnTFnk8q9n5SsfeTShEtFypbLlS1XKjad6Fq38WqfRer912s3n+xev+nNfs/rTmQiXUH/rjuYCaeOPSZjPWHP1t/+PP1hz/fcETEFxuOfFH7nIgva49+uVHGsa+ebI1Nz3+dieNf1x3/uu74pbrjl+pOXKo/can+xDdQKpQKpUKpUCqUCqVCqVAqlJqzSt2z73CogFKhVCgVSoVSKaX++a/fumLFxhb1MZpSxTcMcl+pYp6dVKli8lAqlAqldrxSv7r0DTNUpWrfyQql1CAI/vaPH+RjEARSqeIpU6ly9HxVqnqGpVLVwniVKruFUqFUKDW6UlNspFLFD55Ypcar1LCr1NxXqug2glJFQ7FKlVYVG2KV2mbV+FapUCqUCqV2sFK1N/5il3Yt9TKr5qpSpVVzRKnqG3+vUgukVaFUKBVKzQWlip8lVaDaU6ZSrR9PaUq9dmBFoCCvpcoSqdTgclSlquVSqbJEKDUIgr9/+6N8DIJAKFXrllCqVrPn6Hq5/d1/fpLbt41t1GoKpaolqlJloVCq1lZVqizUrqWKQvXjKVGiKVXtdsj0ndpAqlLVclqpsppQqtj+53f/leVSqbIESoVSk6XUoNWeYkN9jEWp1wwoF01Upf7r+8wPofrxlChRV6mipFthjdgQShXb2ipVbN84bL3Y8CrV+om/2KUpVVulisJexQ1iQ6xSxTZnlSpKpEnFxvc//CQfgyBwrVIHmT5VPvEX5VKp4mlRScakQqn//vF/8jEIAqFUsc1ZpYoKo0pbxIZYpQaKUuUqVTyVYoVSodQkKlVbpWrlnU6pNw3fECiob/xlIa3UW5WFqqZUgfrGXxZylCoJq1Sxbf0SldhlKlW+8Q9iUqpEvvEXT9U3/lpNKBVKTaJSg8vXpwFDqWI7l5XatkQ1rqWKclqp4lqqKJfXUqUpzGupopyzSpUR2JQqNohrqR2oVO1aakCuUnEtFUpNnFKta1LVsGLD9SUq78dT4qv+YhehVLVP7VqqrBwEgXktNbjcqkHrtVSXUrW22lf9RaHrWqqqVPXjKa2m+iUqWWheSw3IVapaTVxLDQy0r/qLQuJaqlWp2rXUIAhGzNkjNohrqUEQMK+lBlilQqlJUyoH/PUUoVT89RQ+8YdSoVQoNbRS5bIrp/56CkqFUqHUXFEq/sYff+MPpUKpUCruRAWlQqlQKpQKpUKpUCqUCqXmn1I7/P8KIBAIRN5EqgkAAEBMpJqamsYDAACIg4xSia9MpdNp/verItSPt2ezTqj5tN/kAQCJIBulqrvkNl2fhp4qlAoAyHWEUk21MZWnmtRbXyuhnxJjhaoQqhWUCgDICnOV6jIdISymldpVqS6he38rpHhLbAAA8KMplVii0lbSenDtaqeezb2m64mnUCoAIB6sSlXh6IZpyVBPraPw93KUGmEOAABAoSpVFQrtR/7SUiUbpVoVSffmFWjYOQAAgAepVObSUiOsUmm8A4VSqlnunS2UCgDICtfHU0zlqeYKpchUGH9xtEiMburVK3f+UQAAQBv8T/ytWBeDnIacCtaahFK9TZjHAgAAEVHf+IuSdlJq5CUhU9acaXOOBWIFAERH+3hKaoWpvDT5VpoYl6+8K6PUNGMhDAAAHvhforKSZq9SObv4nXhrhlJq2KMGAAA75peotAWm14xh7cNXbah1LmeNnKVnAQDAg3ktVWB9I6+qStOut37KkLVabp2Ad/KE+s1d1qVoKGsDAIAHeduUdh0lrLz482HWtP7CiKtzAADIgPulhqpm1oR2AQBt4H6pzDquylAqAKCNhN8vNYLfoVQAgJOE3y/V1Se/HEoFALSR5Pul0lMiRol8CACAPAf3S+WPZZUmNAoAaAP3S6V/GZhHbW1OzBwAkCASfr9UV4fmcNYJQKkAgMtI5v1Smb3RPaiShVUBAKlUgu+Xav0d4P19AKUCAChwv1RrHa9SiQ0AQHLB/VKtFWilWs8Sp38AQJ6D+6XKXepeYlx6IFgVgEST8PuluipnL30AQBJJ5v1SvdqFUgEAUUjm/VIjV4ZSAQAUuF9qhJoAAGAnsfdLNceFUgEA2ZLY+6WaJk1f/huCKXoAAGgjsfdL1Y7LbMWcFQAAtJHY+6XS9oRSAQBRSOz9Us1JQqkAgGxJ7P1SsUoFAMRPYu+XqlYwpwGlAgCikNj7pZqF3iYAAOAB90uFUgEAsZHY+6VqM7fO1tUPAADYSez9Uq1KpT0LAAAeEnu/VOKXATEuAABQJPZ+qa4FKZQKAIhOMu+XmjIcSvQMAABcknm/VNWnUCoAIDa8N/frKMJKrf0kGHa9zG8VrXJukpB8Rf5l39lTnJD8hqpppzMq1fp+n65PE3kmRB0o1bqrU+crm5x29hTna37NcbPNVMcq1TyVzFOsHr+3Pv3izj6F9Aw5rbLN4pUisfmyTtt1sNYOO0WKE5hfdeZmTU6idXJnleo6s8QJ0g4+bM/ehpwKrheQ91WY8h1jjpOofHkz6C3vdClOSH614zJbMWfVhnpXf3VsbnsHrpcmUT9lOx3Eq9zaAz2Z2Hs296aN1xbxNErCWuuHOgSzYajhrP1Yp5GX+aKnRIySzSGEbRIv3vlnkwW622x6NvemfflNkz+M1kIP7aTUsP2YNTkHw8xKqKecuXl78w4Rdg7WcaOlLJb8JjxfdLn1DIc955Hza+0q+yb5ml9zktpe5qzayAWluo7QzIcrSfz+vU+tbemXkfaUeDlGm4Nr3Ggpyz6/ycyXC7OJ2We0k6D1yW9L9MNsojXP4/yaGaT3+vEq1XXWOOV0brz9ENMOm0Ia70BEHde0rYlhdsLBlbJoeaH7Qb5cHZrDWSfAmbnZs2turvNvlhOnzrWL6J+ebdhDI/AORNRxTTvtyK/1wOU0rM09WP9DqjaMua1NOlR9F/IYOKeYOBHeQfmzcqVBq+Ma3cyHdbYuvHMzK4fdpnd5J+A6Ildlfn1rW+aU6FbE6GkjX8ze6B7kiSL68c7THI6zbT7lk5D8moXeJh7oVSo9P7PctU13ZZ00fQzEoV75FHqbMI8lFNZTzcmFNS+ubeTLPA/0aXF1qz5y0HJhLQybX7N/5Nc8A94mHjhKtc47bGpduCYdVwrNl44VYgh6Spxpc44lRM5aW5mnOkJewqYM+VLruGqax0ucAVcP1iPKJr/Mca3zzNf8ajO3ztbVjx2+UrPZplHnzTzF2ijefJgNIxTGkkJil6ua9bispzpaXpinzhw6gfnSKhApUx+1g3Wdf7PQ7NaaR9d2yvHa8B6ddeZEytKdNr/py1OpJciaLw/ZfzyVsmU0Qha9Jda9oRq6dvE78dbkv0T445rnn3jVhs2XVsE6z8gzN/d26nylbD8dnGr0uPwkErs4TVwHZZ2/t8S6t9PlV525BjEuRS789ZScPefFqtaPMApnF/PVI5+ameAMzXyVhP1hiEaoURKYL1dlZhLpmlcgv6FIVH7ltnYU0Q4qlcoBpXrPiHZqtNPhrZ9yv2qtZ41zEomXmrnL7NA1n1BziAX6ledq4uoh//JFnBxXcl2zumI5zZJE5Vd9SkwpHB1+25T27p8eIkL+QtW0vkDj6vzKk7R8Ra5s7srZnKokLb+qT6+cUkOdAs4kIk89Ws/0rrCTie28AwDyEtc/SpGEVWrYJmkFsyYNf1zv0akVoFQAQETMf+eXYlxAkURWKtGntzfCj7JDbcM6lkujXv9qw/GPBQCQ51iVqsLxY4ptYb4fXXWI+l5j0hXUY6E79B4UACChuK6l0nI0y/krO7oCMTqtbGvPnPrq/M1H6zy9BwUASCixfDzl0o2pHqZSI0ArXiukjey1s1lidggASCLanahEIeEL7wKNcEoEpYaahlWLtO+8hxxqtpwKAIB8xnstlUZ6x+s+bzXCldZxiUKzK7o+sU0Pah6dtSEAICm4lMpcshEGtG4TVrLCN6+5K22TuGtcQsf0PCFTAEAbhFK1mqZwzWp0D95uOfU5nZtz8yrY9Wit7+0fAJBQslmlmk1cu4hCr1JdEJ1L5RENzdmau7zSdPUGAEgo0VaprkLrCo7uhCkjTrWwfme2ddX3up6wP91nO9UHALQ7plKJJZ7ZnF/o2kXLN5TltfkzR+EMpNUnxvVWJoBSAej0aEqVP59M97mq0aL0dmvtx7qtFRJW1TrXZOR1N+eXCuwGQNLhvPEn1n3EYpAQUNqN1tarZnqenCGImkR9VyGsCkCiIf4glXhqFloXcbEYhzZdR+GaQ4dPDADQkXT4Xf0BACB/gFIBACA2oFQAAIgNKBUAAGIDSgUAgNiAUgEAIDagVAAAiA0oFQAAYgNKBQCA2IBSAQAgNqBUAACIDSgVAABiA0oFAIDYgFIBACA2oFQAAIgNKBUAAGIDSgUAgNiAUgEAIDagVAAAiA0oFQAAYgNKBQCA2IBSAQAgNqBUAACIi/8DTIjDb1YW+mEAAAAASUVORK5CYII=" alt="" />

返回目录

上一篇:idea 开发插件。


下一篇:Java常用API(Arrays类)