- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 延迟加载与单例模式
延迟加载,也较延迟实例化,延迟初始化等,首要表达的思惟就是,把对象的创建延迟到应用的时辰创建,而不是对象实例化的时辰创建。这种体式格式避免了机能的浪费。
当创建一个对象的子对象开销斗劲大时,并且有可能在法度顶用不到这个子对象,那么久可以推敲用延迟加载的体式格式来创建子对象。别的就是当一个法度启动时,须要创建多个对象,但仅有几个对象须要立即应用,那么可以将一些不须要的初始化工作延迟到应用的时辰。如许可以进步法度的启动速度。
FramWork4.0中供给了一个包装类LazyT,可以轻松实现延迟加载。
今天就先从延迟加载开端学起。
一、延迟加载
1、Class Singleton
{
private static Singleton instance;
private Singleton()
{ }
public static Singleton getInstance()
{
If(instance==null)
{
Instance=new Singleton();
}
Return instance;
}
}
机关函数私有,办法静态。
题目:无法包管线程安然,有多个线程接见getInstance的时辰,会产生多个Singleton对象。
2、若是应用如下的单例模式
class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
//
}
public static Singleton getInstance()
{
return instance;
}
}
这个办法包管了在第一次加载的时辰实例被初始化,且包管了线程安然。然则为进一步请求,我们想要在应用的时辰才才初始化Singleton对象,及延迟加载。那么可以应用如下办法。
3、延迟加载
public class Singleton {
private Singleton(){
}
private static class SingletonHolder
{
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
public static void main(String [] args)
{
Singleton.getInstance();
}
}
办法中Singleton 有一个静态内部类SingletonHolder,内部类在外部加载的时辰并不会加载,在有在调用getInstance才回加载。别的SingletonHolder类应用Private润饰以确保外部类不克不及接见。
二、下面再看一个实例
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 从数据库中取出数据,获得一个DateRow或者DateRader之类的东东然后初始化一个文章实体类对象
Model_Article at = 。。。。;//at=getobject();
// 创建文章分类数据接见对象
DAO_ArticleCategory articleCategory = new DAO_ArticleCategory();
subArticle sarticle = new subArticle();
sarticle.CategoryLazyLoader = articleCategory.GetArticleCategoryById;
sarticle.CategoryLazyLoader(1);
Model_ArticleCategory acc = at.Category;
//
}
}
// 文章分类实体类
public class Model_ArticleCategory
{
public int CategoryID
文档评论(0)