java设计模式(三)---建造者模式
2015-06-03 10:17
302 查看
java设计模式(三)---建造者模式
概述:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用性:
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
建造者模式通常包括下面几个角色:
1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4. Product:要创建的复杂对象。
Builder:
public interface PersonBuilder { void buildHead(); void buildBody(); void buildFoot(); Person buildPerson(); }
ConcreteBuilder:
public class ManBuilder implements 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; } }
[b]Director:
[/b]
public class PersonDirector { public Person constructPerson(PersonBuilder pb) { pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildPerson(); } }
Product:
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 Man extends Person { }
[b]Test:
[/b]
public class Test{ public static void main(String[] args) { PersonDirector pd = new PersonDirector(); Person person = pd.constructPerson(new ManBuilder()); System.out.println(person.getBody()); System.out.println(person.getFoot()); System.out.println(person.getHead()); } }
[b]使用建造者模式的场合和好处
使用建造者模式的好处:
1.使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
[/b]
相关文章推荐
- 安卓Eclipse如何快速修改工程名及包名
- 安卓Eclipse如何快速修改工程名及包名
- Spring Quartz简单例子,定时任务
- 基于xml配置的spring aop 的实现日志 和为通知传递参数
- JAVA操作FTP进行上传删除等操作
- eclipse.ini配置eclipse的启动参数
- Spring MVC ajax提交json数组时415错误解决方法
- eclipse svn 插件安装
- java程序设计第二课
- Java学习笔记之反射
- 关于Eclipse的Indigo和MyEclipse 2013版中文注释时字体太小的问题
- struts2中对象的获取
- [置顶]iOS_Spring自动生成Model,Service,Controller 之 使用教程
- [置顶]iOS_Spring自动生成Model,Service,Controller 之 介绍
- iOS_Spring preUrl参数
- iOS_Spring basePath参数
- Java TreeSet的使用 (LeetCode Contains Duplicate III )
- Java 入门课程视频实战-初级 上线了,猜拳游戏,ATM实战,欢迎围观
- 使用IntelliJ IDEA,gradle开发Java web应用步骤
- 关于Spring jar包下载地址以及方法