9. 建造者模式
2017-01-06 18:02
197 查看
建造者模式属于创建型模式
先来看看定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同表示时。
建造者模式的结构:
1、Builder:为创建一个产品对象的各个部件指定抽象接口。
2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3、Director:构造一个使用Builder接口的对象,指导构建过程。
4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
实现代码:
角色Builder的接口:
角色ConcreteBuilder实现Builder接口:
角色的Director
角色:
测试客户端:
输出是:
以上就是一个完整的例子。其实我以前在读Effective Java的时候,关于构造一个新的对象的时候,也用到了Builder Pattern模式了的。链接如下:
Java创建对象中用到Builder模式
先来看看定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式
适用范围:1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同表示时。
建造者模式的结构:
1、Builder:为创建一个产品对象的各个部件指定抽象接口。
2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3、Director:构造一个使用Builder接口的对象,指导构建过程。
4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
实现代码:
角色Builder的接口:
public interface Builder { void buildHead(); void buildBody(); void buildFoot(); Person buildPerson(); }
角色ConcreteBuilder实现Builder接口:
//man的builder public class ManBuilder implements Builder{ Person person; public ManBuilder() { this.person = new Man(); } @Override public void buildBody() { person.setBody("建造男人的身体"); } @Override public void buildHead() { person.setHead("建造男人的头"); } @Override public void buildFoot() { person.setFoot("建造男人的脚"); } @Override public Person buildPerson() { return this.person; } } //woman的builder public class WomanBuilder implements Builder{ Person person; public WomanBuilder() { person = new Woman(); } @Override public void buildFoot() { person.setFoot("建造女人的脚"); } @Override public void buildHead() { person.setHead("建造女人的头"); } @Override public void buildBody() { person.setBody("建造女人的身体"); } @Override public Person buildPerson() { return person; } }
角色的Director
public class PersonDirector { public Person constructPerson(Builder pb) { pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildPerson(); } }
角色:
public class Person { private String head; private String body; private String foot; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }
测试客户端:
public class Client { public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person manPerson = pd.constructPerson(new ManBuilder()); System.out.println(manPerson.getBody()+"-"+ manPerson.getHead()+"-"+ manPerson.getFoot()); Person womanPerson = pd.constructPerson(new WomanBuilder()); System.out.println(womanPerson.getBody()+"-"+ womanPerson.getHead()+"-"+ womanPerson.getFoot()); } }
输出是:
以上就是一个完整的例子。其实我以前在读Effective Java的时候,关于构造一个新的对象的时候,也用到了Builder Pattern模式了的。链接如下:
Java创建对象中用到Builder模式
相关文章推荐
- .NET设计模式(4):建造者模式(Builder Pattern)
- 建造者模式-Delphi述
- 建造者(BUilder)模式的Java实现[00原创]
- 建造者(Builder)模式
- Builder 建造者模式
- 4.Builder 建造者(生成器)(创建型模式)
- .NET设计模式(4):建造者模式(Builder Pattern)
- 建造者(Builder)模式
- 设计模式c#语言描述——建造者模式
- C#设计模式之建造者(Builder)模式示例源代码
- 我的设计模式之旅(4)——生成器(建造者)模式Builder
- 建造者模式-Build Patern(转-吕震宇)
- 建造者(Builder)模式
- 我的设计模式之旅(4)――生成器(建造者)模式Builder
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 建造者(Builder)模式
- C#设计模式之建造者(Builder)模式示例源代码
- .NET设计模式(4):建造者模式(Builder Pattern)
- 设计模式学习笔记八:建造者模式(Builder Pattern)
- 我读设计模式之建造者模式(Builder Pattern)