CSharp: Proxy Pattern in donet.core 6.0

 

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

namespace Geovin.Du.DuProxy.DuProtectionProxy
{

    /// <summary>
    /// 代理模式 Proxy  Pattern
    /// </summary>
    public class Employee
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="role"></param>
        public Employee(string username, string password, Role role)
        {
            Username = username;
            Password = password;
            Role = role;
        }
        /// <summary>
        /// 賬戶/用戶名
        /// </summary>
        public string Username { get; set; }
        /// <summary>
        /// 密碼
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 角色
        /// </summary>
        public Role Role { get; set; }
    }
}

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

namespace Geovin.Du.DuProxy.DuProtectionProxy
{
    /// <summary>
    /// 代理模式 Proxy  Pattern
    /// 角色
    /// </summary>
    public enum Role
    {
        /// <summary>
        /// 工作人員
        /// </summary>
        Worker,
        /// <summary>
        /// 管理者
        /// </summary>
        Manager,
        /// <summary>
        /// 高層
        /// </summary>
        CEO,
    }

}


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

namespace Geovin.Du.DuProxy.DuProtectionProxy
{

    /// <summary>
    /// 代理模式 Proxy  Pattern
    /// </summary>
    public interface ISharedFolder
    {
        /// <summary>
        /// 
        /// </summary>
        void Access();
    }

}


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

namespace Geovin.Du.DuProxy.DuProtectionProxy
{
    /// <summary>
    /// 代理模式 Proxy  Pattern
    /// </summary>
    public class SharedFolder : ISharedFolder
    {
        /// <summary>
        /// 
        /// </summary>
        public void Access() => Console.WriteLine("打開共享文件夾.");
    }

}

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

namespace Geovin.Du.DuProxy.DuProtectionProxy
{
    /// <summary>
    /// 
    /// </summary>
    public class SharedFolderProxy : ISharedFolder
    {

        /// <summary>
        /// 代理模式 Proxy  Pattern
        /// </summary>
        private readonly Employee _employee;
        /// <summary>
        /// 
        /// </summary>
        private readonly SharedFolder _sharedFolder;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="employee"></param>
        /// <param name="sharedFolder"></param>
        public SharedFolderProxy(Employee employee, SharedFolder sharedFolder)
        {
            _employee = employee;
            _sharedFolder = sharedFolder;
        }
        /// <summary>
        /// 權限 管理者和高層
        /// </summary>
        public void Access()
        {
            if (_employee.Role is Role.Manager or Role.CEO)
            {
                _sharedFolder.Access();
                return;
            }

            Console.WriteLine($"具有該角色的員工 '{_employee.Role}' 沒有訪問共享文件夾的權限");
        }
    }
}

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


namespace Geovin.Du.DuProxy.DuProtectionProxy
{
    /// <summary>
    /// 代理模式 Proxy  Pattern
    /// </summary>
    public static class ProtectionProxyExecutor
    {

        /// <summary>
        /// 
        /// </summary>
        public static void Execute()
        {
            ConsoleExtension.WriteSeparator("代理模式 Protection proxy pattern demo");

            TryToAccessTheSharedFolder("GeovinDu", "password", Role.Worker);
            TryToAccessTheSharedFolder("GeovinTu", "password", Role.CEO);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="role"></param>
        private static void TryToAccessTheSharedFolder(string username, string password, Role role)
        {
            Console.WriteLine(
                $"\n使用用戶名: '{username}'和角色: '{role}' " +
                $"正在嘗試訪問共享文件夾...");

            var employee = new Employee(username, password, role);
            var sharedFolder = new SharedFolder();
            var folderProxy = new SharedFolderProxy(employee, sharedFolder);

            folderProxy.Access();
        }
    }
}

  

調用:

            Geovin.Du.DuProxy.DuProtectionProxy.ProtectionProxyExecutor.Execute();

            Console.WriteLine();

  

輸出:

Hello, Geovin Du! 學習 .net 6

代理模式 Protection proxy pattern demo
--------------------------------------------------

使用用戶名: 'GeovinDu'和角色: 'Worker' 正在嘗試訪問共享文件夾...
具有該角色的員工 'Worker' 沒有訪問共享文件夾的權限

使用用戶名: 'GeovinTu'和角色: 'CEO' 正在嘗試訪問共享文件夾...
打開共享文件夾.

  

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