java单例模式就是这个类只有一个实例,而且是自己创建的,对整个系统只提供一个实例对象。
单例模式的作用:
1、控制资源的使用,通过控制线程的同步来控制资源的并发访问,因为整个系统只有一个对象。
2、控制实例数量,控制资源
3、将这个实例对象作为一个共享资源,提供给线程之间使用
主要优点:
A.提供了对唯一实例的受控访问。
B.由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
C.允许可变数目的实例。
主要缺点:
A.由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
B.单例类的职责过重,在一定程度上违背了“单一职责原则”。
C.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
//构造方法私有化,内置私有对象,对外提供一个静态方法,通过静态方法访问实例对象
import javax.servlet.http.HttpServletRequest;
import com.ycst.craft4j.base.dto.BaseDTO;
import com.ycst.craft4j.constants.Constants;
import com.ycst.craft4j.system.util.StringUtil;
public class ClientRegDTO extends BaseDTO{
private ClientRegDTO(){}
private static ClientRegDTO dto = new ClientRegDTO();;
private String idCardUrl;
private String idCardNo;
private String realIcon;
private String company;
private String bussinessUrl;
private String taxUrl;
private String organizationUrl;
private String idCardReverseUrl;
private String iconUrl;
public static ClientRegDTO getInstance(HttpServletRequest request){
dto.setUserId(StringUtil.toInteger(request.getParameter(Constants.REQUEST_DTO_MODEL.USER_ID)));
dto.setUserType(request.getParameter(Constants.REQUEST_DTO_MODEL.USER_TYPE_CD));
dto.setAccessToken(request.getParameter(Constants.REQUEST_DTO_MODEL.ACCESS_TOKEN));
dto.setPlatForm(request.getParameter(Constants.REQUEST_DTO_MODEL.PLATFORM));
dto.setMobile(request.getParameter(Constants.REQUEST_DTO_MODEL.MOBILE));
dto.setIdCardNo(request.getParameter("idCardNo"));
dto.setCompany(request.getParameter("company"));
return dto;
}
public String getIdCardUrl() {
return idCardUrl;
}
public void setIdCardUrl(String idCardUrl) {
this.idCardUrl = idCardUrl;
}
public String getIdCardNo() {
return idCardNo;
}
public void setIdCardNo(String idCardNo) {
this.idCardNo = idCardNo;
}
public String getBussinessUrl() {
return bussinessUrl;
}
public void setBussinessUrl(String bussinessUrl) {
this.bussinessUrl = bussinessUrl;
}
public String getTaxUrl() {
return taxUrl;
}
public void setTaxUrl(String taxUrl) {
this.taxUrl = taxUrl;
}
public String getOrganizationUrl() {
return organizationUrl;
}
public void setOrganizationUrl(String organizationUrl) {
this.organizationUrl = organizationUrl;
}
public String getRealIcon() {
return realIcon;
}
public void setRealIcon(String realIcon) {
this.realIcon = realIcon;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getIdCardReverseUrl() {
return idCardReverseUrl;
}
public void setIdCardReverseUrl(String idCardReverseUrl) {
this.idCardReverseUrl = idCardReverseUrl;
}
public String getIconUrl() {
return iconUrl;
}
public void setIconUrl(String iconUrl) {
this.iconUrl = iconUrl;
}
}