关于Builder设计模式,网上有很多,在此结合其他的文章对Builder模式进行一个简单的梳理。
先说一下简单的逻辑:现在我们需要建造一座房子,我们需要请 设计师、工人,首先我需要告诉设计师我需要一套房子,设计师就设计一个方案命令工人施工,工人做完之后直接交付到我手里,大致就是这样一个流程。
我们都知道房子的样式各种各样,这就取决去设计师如何设计。ok,那我们就来定义一个房子。
public class Room{
/*窗户*/
private Window window;
/*门*/
private Door door;
/*地板*/
private Floor floor;
public void buildWindow(Window window){
this.window = window;
}
public void buildDoor(Door door){
this.door = door;
}
public void buildFloor(Floor floor){
this.floor = floor;
}
}
房子定义好了之后需要有个工人建造它,现在我们来定义工人,这里我采用静态内部类定义工人,这样使用起来更加方便、直观,Android中的AlertDialog就是采用这种方法创建。接下来我们就修改Room的代码:
public class Room{
/*窗户*/
private Window window;
/*门*/
private Door door;
/*地板*/
private Floor floor;
public void buildWindow(Window window){
this.window = window;
}
public void buildDoor(Door door){
this.door = door;
}
public void buildFloor(Floor floor){
this.floor = floor;
}
public static void Worker{
private Roon room = new Room();
public Worker setWindow(Window window){
room.buildWindow(window);
return this;
}
public Worker setDoor(Door door){
room.buildeDoor(door);
return this;
}
public Worker setFloor(Floor floor){
room.setFloor(floor);
return this;
}
public Room getRoom(){
return room;
}
}
}
现在房子、工人都全了,就差一个设计师了,那好,我们先来定义一个接口,然后再实现这个接口。这里为什么要对设计师设计接口呢?其实在实际的运用当中,设计师就充当我们的需求,比如:第一天我们去肯德基吃饭,肯德基有各种各样的食品,那我们只需要一杯可乐和一个汉堡,那好,那我们只需要在接口的方法里调用这两种食物,其他的不需要我们就不实现。第二天我们再去肯德基,实在是太饿了,我们要了一个全家桶、一个汉堡、一杯可乐,那我们就需要在接口的方法里调用这三种食物。
接下来我们定义接口:
public interface DesignerInterface {
void command(Room.Worker worker);
}
我们通过Designer类来实现接口
public class Designer implements DesignerInterface{
public void command(Room.Worker worker) {
/*建造窗户*/
worker.setWindow(new Window());
/*建造门*/
worker.setDoor(new Door());
/*根据设计师的设计,我们就不建造地板了,当然每个设计师有每个设计的想法,这就是我们在实际的运用中,每个项目有每个项目的需求*/
}
}
现在万事具备只欠东风,我们写个测试类实现一下。
public class Text{
public static void main(String[] args){
Room.Worker worker = new Room.Worker();
DesignerInterface designer = new Designer();
designer. command(worker);
Room room = worker.getRoom();
}
}
到这里就结束了,其实我们将静态内部类和建造者模式结合在了一起,取决于每个人的喜好,个人认为这样使用更加的直观简单,还有一点在实际使用当中,设计师并不是必须要有的,设计师相当与一个中介,有了这个中介是可以降低我们代码的耦合度滴。