设计模式之建造者模式
2018-09-11 本文已影响7人
tanoak
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(ps:简单理解隐藏内部的建造过程和细节,方便创建复杂的对象)
-
UML
-
code
/** * @Desc 水果接口 */ public interface FruitBuilder { /** * 创建水果 */ void createFruit(); /** * 水果颜色 */ void buildColor() ; /** * 水果形状 */ void buildShape() ; /** * 创建水果 * @return */ Fruit getFruit(); }
@Data public class Fruit { private String name; private String color; private String shape; public Fruit(String name) { this.name = name; } public Fruit() { } }
public class BananaBuilder implements FruitBuilder {
private Fruit fruit;
@Override
public void createFruit() {
this.fruit = new Fruit("香蕉") ;
}
@Override
public void buildColor() {
this.fruit.setColor("红色");
}
@Override
public void buildShape() {
this.fruit.setShape("圆形");
}
@Override
public Fruit getFruit() {
return fruit;
}
}
public class AppleBuilder implements FruitBuilder {
private Fruit fruit;
@Override
public void createFruit( ) {
this.fruit= new Fruit("苹果") ;
}
@Override
public void buildColor() {
this.fruit.setColor("蓝色");
}
@Override
public void buildShape() {
this.fruit.setShape("椭圆形");
}
@Override
public Fruit getFruit() {
return fruit;
}
}
public class Soul {
public Fruit createFruit(FruitBuilder fruitBuilder){
fruitBuilder.createFruit();
fruitBuilder.buildColor();
fruitBuilder.buildShape();
return fruitBuilder.getFruit();
}
}
public class Main {
public static void main(String[] args) {
Soul soul = new Soul();
//苹果
System.out.println("生产了:" + soul.createFruit(new AppleBuilder()));
System.out.println("----------------------------------------");
//香蕉
System.out.println("生产了:" + soul.createFruit(new BananaBuilder()));
}
}
建造者模式与工厂模式类似,但是建造者模式能应对更加复杂的创建过程。