美文网首页
2)建造者模式(Builder)

2)建造者模式(Builder)

作者: 浅尘Lian | 来源:发表于2017-02-08 11:07 被阅读0次
    一、通过Client、Director、Builder和Product形成的建造者模式
    例子

    就好象我要一座房子住,可是我不知道怎么盖,也不知道怎么样设计,于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要!

    Product:

    class Room {
    
        private Window window;
        private Floor floor;
    
        public Window getWindow() {
            return window;
        }
    
        public void setWindow(Window window) {
            this.window = window;
        }
    
        public Floor getFloor() {
            return floor;
        }
    
        public void setFloor(Floor floor) {
            this.floor = floor;
        }
    }
    

    Builder:

    class RoomBuilder {
    
        private Room room = new Room();
    
        public void makeWindow() {
            room.setWindow(new Window());
        }
    
        public void makeFloor() {
            room.setFloor(new Floor());
        }
    
        public Room getRoom() {
            return room;
        }
    
    }
    

    Director:

    class Designer {
        
        public void command(Builder builder){
            // 先建造地板
            builder.makeFloor();
            // 再建造窗户
            builder.makeWindow();
        }
    }
    

    Client:

    public class Client {
    
        public static void main(String[] args) {
            // 先找来一个工人
            Builder builder = new RoomBuilder();
            // 再找来一个房屋设计师
            Designer designer = new Designer();
            // 工人按照设计师设计建造
            designer.command(builder);
            // 工人向雇主交房子
            Room newRoom = builder.getRoom();
        }
    
    }
    
    二、通过静态内部类等方式实现的零件无序话构造:
    package com.qqyumidi;
    
    public class Client {
    
        public static void main(String[] args) {
            User.Builder builder = new User.Builder();
            User user = builder.setName("corn").setAge(100).setAddress("广州").build();
        }
    }
    
    class User {
    
        private String name;
        private int age;
        private String address;
    
        public String getName() {
            return name;
        }
    
        public int getAge() {
            return age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public static class Builder {
            private User user = new User();
    
            public Builder setName(String name) {
                user.name = name;
                return this;
            }
    
            public Builder setAge(int age) {
                user.age = age;
                return this;
            }
    
            public Builder setAddress(String address) {
                user.address = address;
                return this;
            }
    
            public User build() {
                return user;
            }
        }
    }
    

    </br>
    使用此种方式可以直接通过联级形式构造对象非常直观方便。Android中的AlertDialog即采用此种方式创建。

    </br>

    http://www.cnblogs.com/lwbqqyumidi/p/3742562.html

    相关文章

      网友评论

          本文标题:2)建造者模式(Builder)

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