您的位置:首页 > 其它

简单理解常用设计模式(九)建造者模式

2018-03-06 11:08 477 查看
这里记录一个比较常用的模式,建造者模式,主要是应用于:当创建复杂对象的算法应该独立于该对象的组成部分,以及它们的装配方式时适用。
建造者模式:将一个复杂对象的构建,于它的表示分离,使得同样的构建过程可以创建不同的表示。
这里应用原书的场景,调用方生成一个人物形象,不应该让调用方来决定每个细节,比如胖身体,大头等,应该给调用方提供一个整体方案如胖子人物,瘦子人物。
原书UML如下:



调用类如下:package com.gcc.builderModel;
/**
* 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。
* 使用户不必知道建造细节,只需指定建造结果。
* 实现接口,同时防止建造细节的遗漏
*
*/
public class TestBuilder {

public static void main(String[] args) {
PersionBuilder pa = new PersionA();
PersionBuilder pb = new PersionB();
new DirectPersion(pa).createPersion();
new DirectPersion(pb).createPersion();
}

}
接口如下:package com.gcc.builderModel;

public interface PersionBuilder {

void head();
void body();
void leftHand();
void rightHand();
void leftFoot();
void rightFoot();

}
人物A如下:package com.gcc.builderModel;

public class PersionA implements PersionBuilder {

@Override
public void head() {
System.out.print("大头");
}

@Override
public void body() {
System.out.print("胖身体");
}

@Override
public void leftHand() {
System.out.print("胖左手");
}

@Override
public void rightHand() {
System.out.print("胖右手");
}

@Override
public void leftFoot() {
System.out.print("胖左脚");
}

@Override
public void rightFoot() {
System.out.println("胖右脚");
}

}
人物B如下:package com.gcc.builderModel;

public class PersionB implements PersionBuilder {

@Override
public void head() {
System.out.print("小头");
}

@Override
public void body() {
System.out.print("瘦身体");
}

@Override
public void leftHand() {
System.out.print("瘦左手");
}

@Override
public void rightHand() {
System.out.print("瘦右手");
}

@Override
public void leftFoot() {
System.out.print("瘦左脚");
}

@Override
public void rightFoot() {
System.out.print("瘦右脚");
}

}
指挥者类如下:package com.gcc.builderModel;

/**
* 指挥者,用来隔离用户和具体的实现过程
*
*/
public class DirectPersion {

PersionBuilder builder;

public DirectPersion(PersionBuilder builder) {
this.builder = builder;
}

public void createPersion(){
builder.head();
builder.body();
builder.leftHand();
builder.rightHand();
builder.leftFoot();
builder.rightFoot();
}

}
咳咳,才发现demo的person拼写错了,大家见谅。
还有对于指挥者类的修改,如果需要添加的功能(方法)是公共的,比如耳朵,眼睛则可以添加,否则就不应该添加。
指挥者(建造者)类隐藏了一个人物(产品)是如何组装的过程,如果要修改组装,修改指挥者类的调用即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: