Java build模式

来源:互联网 发布:mac python idle 中文 编辑:程序博客网 时间:2024/06/07 09:59

当一个类的参数多的情况下,使用重叠构造器模式客户端代码会很难编写,并且可读性差;使用javabean模式,调用一个无参的构造器,然后调用setter方法来设置每个必要的参数。但是javabean自身有着严重的缺点,因为构造过程被分到几个调用中,在构造javabean可能处于不一致的状态,类无法仅仅通过检验构造器参数的有效性来保证一致性。另一点不足之处,javabean模式阻止了把类做成不可变的可能,这就需要程序员付出额外的努力来确保他的线程安全; build模式 既能保证像重叠构造器那样的安全,也能实现JavaBean模式那样的可读性。
使用build模式的步骤:
(1)不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个build对象。
(2)然后让客户端在build对象上调用类似的setter方法来设置每个相关的可选参数,
(3)最后,客户端调用无参的build方法来生成不可变的对象。这个builder是它构建的静态成员类。

实例:

package com.bh.realTimeMonitor.entity;/**    设备实体类  *  @author 崔耀强   20150507-20150822 *  @version 1.1 * */import java.util.ArrayList;public class Equipment  {    private int id;  //设备id    private String name;  //设备的名称    private String location;  //位置信息    private double coordinateX;  // 坐标x    private double coordinateY;  // 坐标y    private EquipmentType equipmentType;  //设备类型    private String IP;  //IP    private String port;  //端口号    private int module;  //属于哪个模块(设备连接和位置区分)    private int subSysId;  //属于哪个子系统    private String  health;  //设备健康值    private int netWorkState;  //网络情况    private ArrayList<BusinessValue> value;    public ArrayList<BusinessValue> getValue() {        return value;    }    public void setValue(ArrayList<BusinessValue> value) {        this.value = value;    }    public int getNetWorkState() {        return netWorkState;    }    public void setNetWorkState(int netWorkState) {        this.netWorkState = netWorkState;    }    public String getHealth() {        return health;    }    public void setHealth(String health) {        this.health = health;    }    public int getCoordinateInterfaceID() {        return module;    }    public void setCoordinateInterfaceID(int coordinateInterfaceID) {        module = coordinateInterfaceID;    }    public String getIP() {        return IP;    }    public void setIP(String iP) {        IP = iP;    }    public String getPort() {        return port;    }    public void setPort(String port) {        this.port = port;    }    public EquipmentType getEquipmentType() {        return equipmentType;    }    public void setEquipmentType(EquipmentType equipmentType) {        this.equipmentType = equipmentType;    }    public double getCoordinateX() {        return coordinateX;    }    public void setCoordinateX(double coordinateX) {        this.coordinateX = coordinateX;    }    public double getCoordinateY() {        return coordinateY;    }    public void setCoordinateY(double coordinateY) {        this.coordinateY = coordinateY;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getLocation() {        return location;    }    public void setLocation(String location) {        this.location = location;    }    public Equipment(int id, String location ) {        this.id = id;        this.location = location;    }    public int getModleID() {        return subSysId;    }    public void setModleID(int modleID) {        this.subSysId = modleID;    }    public static class Builder {        private int id;  //设备id        private String name;  //shebei的名称        private String location;  //位置信息        private double coordinateX;  // 坐标x        private double coordinateY;  // 坐标y        private EquipmentType equipmentType;  //设备类型        private String IP;  //IP        private String port;  //端口号        private int module;  //属于哪个模块(设备连接和位置区分)        private int subSysId;  //属于哪个子系统        private String  health;  //设备健康值        private int netWorkState;  //网络情况        private ArrayList<BusinessValue> value;        public Builder(int id, String name,EquipmentType equipmentType,String location) {            super();            this.id = id;            this.name = name;            this.equipmentType = equipmentType;            this.location = location;        }        public Builder coordinate_X(double coordinate_X) {            this.coordinateX = coordinate_X;            return this;        }        public Builder coordinate_Y(double coordinate_Y) {            this.coordinateY = coordinate_Y;            return this;        }        public Builder iP(String iP) {            IP = iP;            return this;        }        public Builder port(String port) {            this.port = port;            return this;        }        public Builder module(int module) {            this.module = module;            return this;        }        public Builder subSysId(int subSysId) {            this.subSysId = subSysId;            return this;        }        public Builder health(String health) {            this.health = health;            return this;        }        public Builder netWorkState(int netWorkState) {            this.netWorkState = netWorkState;            return this;        }        public Builder value(ArrayList<BusinessValue> value) {            this.value = value;            return this;        }        public Equipment build() {            return new Equipment(this);        }    }    private Equipment(Builder builder) {        id = builder.id;        name = builder.name;        location = builder.location;        coordinateX = builder.coordinateX;        coordinateY = builder.coordinateY;        equipmentType = builder.equipmentType;        IP = builder.IP;        port = builder.port;        module = builder.module;        subSysId = builder.subSysId;        health = builder.health;        netWorkState = builder.netWorkState;        value = builder.value;    }    public Equipment() {        super();    }}
0 0
原创粉丝点击