浅谈建造者(Builder)设计模式 - java

关于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();  
    }
    
}

到这里就结束了,其实我们将静态内部类和建造者模式结合在了一起,取决于每个人的喜好,个人认为这样使用更加的直观简单,还有一点在实际使用当中,设计师并不是必须要有的,设计师相当与一个中介,有了这个中介是可以降低我们代码的耦合度滴。

    原文作者:麦兜叮叮当
    原文地址: https://www.jianshu.com/p/19f6985748bb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞