类的单例模式网上有很多,比如最简单的这种,先申明一下。
public class DubboPoliceDeviceConsume extends BaseService{ private DubboPoliceDeviceConsume(){}//将构造函数申明为private,只能由本类成员调用,其他类无法调用,保障了单例。其他类就无法new一个对象了。 private static DubboPoliceDeviceConsume dubboPoliceDeviceConsume = null;//申明一个实例,private说明只有这个类可以使用,static说明有且只有这一个成员对象,不会每次生成一个类对象的时候你就生成一个新的成员
//private static 和 public static 都是静态变量,在类加载时就定义,不需要创建对象,但是private static 是私有的,不能在外部访问,只能通过静态方法调用,这样可以防止对变量的修改
public static DubboPoliceDeviceConsume getInstance() {
if(null == dubboPoliceDeviceConsume){ dubboPoliceDeviceConsume = new DubboPoliceDeviceConsume(); } return dubboPoliceDeviceConsume; } @SuppressWarnings("unchecked") public ResultPojo getPagePoliceDeviceInfo(String deviceCode,String deviceTypeCode,String deviceModel,String localDepartment,String usageState, String locationId,String orderSeq,Page page){ DubboPoliceDeviceInfoService service = (DubboPoliceDeviceInfoService) SpringContextUtil.getBean("dubboPoliceDeviceInfoService"); ResultPojo pojo = service.getPageDeviceInfoOrd(deviceCode, deviceTypeCode, deviceModel, localDepartment,usageState, locationId,orderSeq,page); return pojo; } //添加 public ResultPojo addPoliceDeviceInfo(PoliceDeviceInfoDto policeDeviceInfoDto,String personName){ DubboPoliceDeviceInfoService service = (DubboPoliceDeviceInfoService) SpringContextUtil.getBean("dubboPoliceDeviceInfoService"); ResultPojo resultPojo=service.addDeviceInfo(policeDeviceInfoDto,personName); return resultPojo; }
}
这个是将类变成单例模式,还有一种情况就是类本身是单例模式,但是里面new一个新的其他对象,也可以改造为单例模式
@Service public class RegionManageService { private static DubboRegionInfoService dubboRegionInfoService = null;//原本每次都需要重新调用一次生成对象的,比如上面的DubboPoliceService,但是这里写成单例private DubboRegionInfoService getInstance(){//private说明私有,只能本类调用就够了,不需要static, public static更普遍适用于方法,有了public表明其他类也可以调用,而且不需要实例化。private static适用于定义成员对象。 if(null == dubboRegionInfoService){ dubboRegionInfoService = (DubboRegionInfoService)SpringContextUtil.getBean("dubboRegionInfoService"); } return dubboRegionInfoService; } public ResultPojo getRegionInfo(){ return this.getInstance().getRegionInfo(); } }