创建者模式
一、创建模式涉及角色
1.抽象创建者角色(Builder):为创建一个产品对象的各个组件指定抽象接口。
2.具体创建者角色(ConcreteBuilder):实现抽象builder接口以构造和装配产品的各个组件,定义并明确它所创建的表示,并提供一个检索产品的接口。
包含构造和创建一个产品的所有代码。
3.指导者(Director):构造一个使用Builder接口的对象,指导构建过程。
4.产品(Product):表示被构造的复杂对象。ConcreteBuilder创建改成产品
二、在什么情况下使用建造模式
1. 需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分。
2. 创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时。
3.构造过程必须允许被构造的对象有不同的表示时。
三、实例代码
public
interface
Builder {
public
void
createPartA();
public
void
createPartB();
public
void
createPartC();
public
Food
createFood();
}
public
class
ChilderFoodBuilder
implements
Builder {
Food
food;
public
ChilderFoodBuilder() {
this.food
=
new
Food();
}
@Override
public
void
createPartA() {
System.out.println("创建的是儿童餐-A部分");
}
@Override
public
void
createPartB() {
System.out.println("创建的是儿童餐-B部分");
}
@Override
public
void
createPartC() {
System.out.println("创建的是儿童餐-C部分");
}
@Override
public
Food createFood() {
return
food;
}
}
public
class
WomenFoodBuilder
implements
Builder {
Food
food ;
public
WomenFoodBuilder() {
this.food
=
new
Food();
}
@Override
public
void
createPartA() {
System.out.println("创建的是适合女士的减肥餐-A");
}
@Override
public
void
createPartB() {
System.out.println("创建的是适合女士的减肥餐-B");
}
@Override
public
void
createPartC() {
System.out.println("创建的是适合女士的减肥餐-C");
}
@Override
public
Food createFood() {
return
food;
}
}
public
class
Food {
private
String
partA;
private
String
partB;
private
String
partC;
public
String getPartA() {
return
partA;
}
public
void
setPartA(String partA) {
this.partA
= partA;
}
public
String getPartB() {
return
partB;
}
public
void
setPartB(String partB) {
this.partB
= partB;
}
public
String getPartC() {
return
partC;
}
public
void
setPartC(String partC) {
this.partC
= partC;
}
}
public
class
Director {
public
Food createDiffTypeFood(Builder bu){
bu.createPartA();
bu.createPartB();
bu.createPartC();
return
bu.createFood();
}
}
public
class
Test {
public
static
void
main(String args[]) {
Director director =
new
Director();
director.createDiffTypeFood(new
ChilderFoodBuilder());
director.createDiffTypeFood(new
WomenFoodBuilder());
}
}