CSharp: Lazy Load Pattern in donet core 6

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Geovin.Du.DuLazyLoad.DuVirtualProxy
{

    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public class College
    {

        /// <summary>
        /// 序號
        /// </summary>
        public int Id { get; init; }
        /// <summary>
        /// 圖書館信息
        /// </summary>
        public virtual Library? Library { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public void ShowDetails() =>
            Console.WriteLine(
                $"大學圖書館有 {Library!.NumberOfBooks} 本書 " +
                $"創建時間爲:{Library.EstablishmentDate.ToShortDateString()}.");
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Geovin.Du.DuLazyLoad.DuVirtualProxy
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public class CollegeFactory
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public College CreateFromId(int id) => new ProxyCollege(id);
    }

}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Geovin.Du.DuLazyLoad.DuVirtualProxy
{

    /// <summary>
    /// 
    /// </summary>
    public class ProxyCollege : College
    {

        /// <summary>
        /// Lazy Load Pattern
        /// </summary>
        /// <param name="id"></param>
        public ProxyCollege(int id)
        {
            Id = id;
            Console.WriteLine("學院信息初始化完成.");
        }
        /// <summary>
        /// 
        /// </summary>
        public override Library? Library
        {
            get
            {
                if (base.Library == null)
                {
                    base.Library = new Library();
                }

                return base.Library;
            }
            set => base.Library = value;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object? obj)
        {
            if (obj is not College college)
            {
                return false;
            }

            return college.Id == Id;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode() => Id.GetHashCode();
    }

}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Geovin.Du.BuildingBlocks;


namespace Geovin.Du.DuLazyLoad.DuVirtualProxy
{

    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public static class VirtualProxyExecutor
    {
        public static void Execute()
        {
            ConsoleExtension.WriteSeparator("延遲加載模式 Lazy Load Pattern--Virtual proxy demo");

            var collegeFactory = new CollegeFactory();
            var college = collegeFactory.CreateFromId(1);

            // College library shouldn't have been constructed before calling ShowDetails method.
            Console.WriteLine("給我更多關於這所大學的細節!");
            college.ShowDetails();
        }
    }

}

  

調用:

  Geovin.Du.DuLazyLoad.DuVirtualProxy.VirtualProxyExecutor.Execute();

  

輸出:

延遲加載模式 Lazy Load Pattern--Virtual proxy demo
--------------------------------------------------
學院信息初始化完成.
給我更多關於這所大學的細節!
加載庫...
大學圖書館有 210000 本書 創建時間爲:2008/5/28.

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章