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
- Java build模式
- java build设计模式
- JAVA设计模式 Build 模式
- Java的建造模式(Build)
- build 模式
- Build模式
- Build模式
- java Build模式 建造者模式 简明版
- 生成器模式(Build)
- 生成器模式(Build)
- android build 模式
- 简单的build模式
- build模式小例子
- Build设计模式
- MVP模式+Build模式+Observe模式
- 建造者(build)模式
- JavaBean构造使用Build模式
- build模式的第二篇
- Python-全局变量VS局部变量
- Reference
- 保险名词
- hashCode和equals重写
- Python核心编程 示例错误
- Java build模式
- MongoDB入门学习笔记之mongo shell和java客户端
- c++ stl 之vector浅析
- Android onNewIntent报错java.lang.IllegalStateException
- LitePal + Gson + Volley的ORM框架尝试
- const
- Linux环境下一种比较有用的多线程程序调试技巧
- 辛星解读一次在mysql中获取排名的实例
- 文档管理