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

作者: 麦兜叮叮当 | 来源:发表于2017-01-10 14:18 被阅读50次

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

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

    相关文章

      网友评论

        本文标题:浅谈建造者(Builder)设计模式 - java

        本文链接:https://www.haomeiwen.com/subject/lzukbttx.html