延迟加载设计模式

延迟加载是一种概念,让我们将对象的加载推迟到真正需要它的时候才进行。

  • 延迟加载实际上只是给“在真正需要时才初始化类”这一过程起的一个 fancy name(花哨的名字)。
  • 简单来说,延迟加载是一种软件设计模式,其中对象的初始化仅在实际需要时发生,而不是提前进行,以保持使用的简洁性并提高性能。
  • 当对象创建的成本非常高,而该对象的使用却非常罕见时,延迟加载就显得至关重要。因此,这是一种值得实施延迟加载的场景。延迟加载的基本思想是在需要时才加载对象/数据。

例如,假设我们正在创建一个应用程序,其中有一个 Company(公司)对象,该对象在 ContactList 对象中包含公司员工列表。一家公司可能有数千名员工。从数据库中加载 Company 对象以及 ContactList 对象中的所有员工列表可能会非常耗时。在某些情况下,您甚至根本不需要员工列表,但您却被迫等待,直到公司和员工列表全部加载到内存中为止。

一种节省时间和内存的方法是避免在需要之前加载员工对象,而这是通过使用延迟加载设计模式来完成的。

<a href="https://media.geeksforgeeks.org/wp-content/cdn-uploads/LazyLoading1.png"><img src="https://media.geeksforgeeks.org/wp-content/uploads/lazy-loading.png" alt="LazyLoading1" />
延迟加载模式有四种常见的实现方式:

  • 虚拟代理
  • 延迟初始化
  • 幽灵模式
  • 值持有者

虚拟代理

虚拟代理模式是一种节省内存的技术,建议将对象的创建推迟到需要它的时候。当创建一个对象在内存使用或涉及的处理方面代价昂贵时,通常会使用它。

Java


// Java program to illustrate

// virtual proxy in

// Lazy Loading Design Pattern

import java.util.List;

import java.util.ArrayList;

interface ContactList

{

public List getEmployeeList();

}

class Company {

String companyName;

String companyAddress;

String companyContactNo;

ContactList contactList;

public Company(String companyName, String companyAddress,

String companyContactNo, ContactList contactList)

{

this.companyName = companyName;

this.companyAddress = companyAddress;

this.companyContactNo = companyContactNo;

this.contactList = contactList;

}

public String getCompanyName()

{

return companyName;

}

public String getCompanyAddress()

{

return companyAddress;

}

public String getCompanyContactNo()

{

return companyContactNo;

}

public ContactList getContactList()

{

return contactList;

}

}

class ContactListImpl implements ContactList {

public List getEmployeeList()

{

return getEmpList();

}

private static List getEmpList()

{

List empList = new ArrayList(5);

empList.add(new Employee("Lokesh", 2565.55, "SE"));

empList.add(new Employee("Kushagra", 22574, "Manager"));

empList.add(new Employee("Susmit", 3256.77, "G4"));

empList.add(new Employee("Vikram", 4875.54, "SSE"));

empList.add(new Employee("Achint", 2847.01, "SE"));

return empList;

}

}

class ContactListProxyImpl implements ContactList {

private ContactList contactList;

public List getEmployeeList()

{

if (contactList == null) {

System.out.println("Fetching list of employees");

contactList = new ContactListImpl();

}

return contactList.getEmployeeList();

}

}

class Employee {

private String employeeName;

private double employeeSalary;

private String employeeDesignation;

public Employee(String employeeName,

double employeeSalary, String employeeDesignation)

{

this.employeeName = employeeName;

this.employeeSalary = employeeSalary;

this.employeeDesignation = employeeDesignation;

}

public String getEmployeeName()

{

return employeeName;

}

public double getEmployeeSalary()

{

return employeeSalary;

}

public String getEmployeeDesignation()

{

return employeeDesignation;

}

public String toString()

{

return "Employee Name: " + employeeName + ",

EmployeeDesignation : " + employeeDesignation + ",

Employee Salary : " + employeeSalary;

}

}

class LazyLoading {

public static void main(String[] args)

{

ContactList contactList = new ContactListProxyImpl();

Company company = new Company

("Geeksforgeeks", "India", "+91-011-28458965", contactList);

System.out.println("Company Name: " + company.getCompanyName());

System.o

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/22027.html
点赞
0.00 平均评分 (0% 分数) - 0