设计模式-创建型模式#建造者模式Builder

来源:互联网 发布:gunnar知乎 编辑:程序博客网 时间:2024/04/30 21:34

设计模式-创建型模式#工厂方法FactoryMethod

设计模式-创建型模式#抽象工厂AbstractFactory


建造者模式
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
1、当创建复杂对象的算法应该独立于改对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
参与者
1、Builder
为创建一个Product对象的各个部件指定抽象接口。
2、ConcreteBuilder
实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口。
3、Director
构造一个使用Builder接口的对象
4、Product
表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它
的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

类图:


实线箭头表示单向关联,即:关联类知道被关联类的公共属性及操作,但被关联类 并不知道关联类的公共属性及操作。
关联单向、双向之分。双向关联用没有箭头的实线表示 ,实线箭头表示Object Message,也就是类间的消息发送,
比如:方法调用和请求等等,这些都是从一方向另一方主动发出信息。 
虚线箭头表示两个类之间存依赖关系。即:一个类引用另一个类。只存在单向依赖。 虚线箭头表示Return Message,
一般用于表示方法调用后的返回信息

代码中的表现:

实线代表有引用的关联,一般代码中会直接有关联的类的引用,但虚线就没有,一般知识方法上的调用关系。如是而已。

package com.dsp;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;}}

package com.dsp;public class Man extends Person {}

package com.dsp;public interface PersonBuilder {void buildHead();void buildBody();void buildFoot();Person buildPerson();}

package com.dsp;public class ManBuilder implements PersonBuilder {Person person;public ManBuilder() {person = new Man();}@Overridepublic void buildHead() {person.setHead("建造男人的头");}@Overridepublic void buildBody() {person.setBody("建造男人的身体");}@Overridepublic void buildFoot() {person.setFoot("建造男人的脚");}@Overridepublic Person buildPerson() {return person;}}

package com.dsp;public class PersonDirector {public Person constructPerson(PersonBuilder pb){pb.buildHead();pb.buildBody();pb.buildFoot();return pb.buildPerson();}}

package com.dsp;public class Test {public static void main(String[] args) {PersonDirector pd = new PersonDirector();Person person = pd.constructPerson(new ManBuilder());System.out.println(person.getHead());System.out.println(person.getBody());System.out.println(person.getFoot());}}

控制台输出:

建造男人的头
建造男人的身体
建造男人的脚


0 0
原创粉丝点击